PDA

Ver la Versión Completa : convertir un file a byte


ANCELMO
03-08-2018, 17:40:20
Buenos dias.

he estado buscando como pasar un archivo X a bits pero no he encontrado como, me prodian dar una idea de como realizarlo o si existe una funcion que lo haga me la compartiera porfavor.

Casimiro Notevi
03-08-2018, 18:32:05
"File a byte", "file a bit", ¿qué es lo que necesitas hacer exactamente?

ANCELMO
03-08-2018, 23:10:05
mira tengo que enviar un xml por un web service en el web service ha toca enviar unas etiquetas endonde se coloca en archivo en bytes para que al otro lado lo puedan crea, del mismo modo ese arreglo de bytes cuando lo retornen necesito crearlo

gmontes
04-08-2018, 04:29:42
en delphi 7 yo tomo el archivo xml formado y lo convierto asi:



function TProveedorFinkOk.FileToByteArray( const FileName : string ) : TByteDynArray;
const BLOCK_SIZE=1024;
var BytesRead, BytesToWrite, Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Reset(F);
try
Count := FileSize( F );
SetLength(Result, Count );
pTemp := @Result[0];
BytesRead := BLOCK_SIZE;
while (BytesRead = BLOCK_SIZE ) do
begin
BytesToWrite := Min(Count, BLOCK_SIZE);
BlockRead(F, pTemp^, BytesToWrite , BytesRead );
pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
Count := Count-BytesRead;
end;
finally
CloseFile( F );
end;
end;



hago esto porque la rutina original no me tomaba la Ñ , ñ, y otros campos mas

esta rutina es la original



function TProveedorFinkOk.UTF8Bytes(const s: UTF8String): TBytedynArray; // sacada de http://stackoverflow.com/questions/5233480/string-to-byte-array-in-utf-8
begin
{$IF Compilerversion >= 20}Assert(StringElementSize(s)=1){$IFEND};
SetLength(Result, Length(s));
if Length(Result)>0 then
Move(s[1], Result[0], Length(s));
end;




y esta es la rutina que timbra en finkok


function TProveedorFinkOk.TimbrarDocumento2(const aComprobante:
string; const aTransaccion: Int64): TCadenaUTF8;
var
respuestaTimbrado: TFinkOkRespuestaTimbrado;
sXML:TByteDynArray;
begin
//sXML := UTF8Bytes(aComprobante.XML);

sXML := FIleToByteArray(aComprobante);

respuestaTimbrado := fwsTimbradoFinkOk.stamp(sXML,fCredencialesPAC.RFC,fCredencialesPAC.Clave);
if Trim(respuestaTimbrado.CodEstatus) <> '' then
Result := ExtraerNodoTimbre(respuestaTimbrado.xml);
if Trim(respuestaTimbrado.CodEstatus) = '' then
begin
{$IFDEF CODESITE}
CodeSite.Send('Falla Validacion Error No.', respuestaTimbrado.Incidencias[0].CodigoError+'/Detalle :'+respuestaTimbrado.Incidencias[0].MensajeIncidencia);
{$ELSE}
raise exception.Create('Falla Validacion Error No.'+ respuestaTimbrado.Incidencias[0].CodigoError+'/Detalle :'+respuestaTimbrado.Incidencias[0].MensajeIncidencia);
{$ENDIF}
end;
end;


lo hice asi porque en delphi 7 tengo problemas con las conversiones de tipos que en versiones mas recientes no hay problema

espero empezar a migrar de delphi 7 a lo mas reciente pronto

estas rutinas las cambie del original que se encuentra en el proyecto bambucode para construir el cfdi 3.3 y timbrar en finkok

Alex Mireles
07-08-2018, 02:03:19
Hola Amigo,
Para tener mas opciones de solución, revisa los temas de

EncodeDecodeBase64


https://stackoverflow.com/questions/5795263/binary-to-base64-delphi


Nota:
Suponiendo que tu proyecto utiliza SOAP y WebServices.....Un archivo binario no se puede transportar por HTTP debido a que se solo se permite texto, lo que se debe hacer es convertir esa cadena de bytes "binarios" a bytes de "texto" y asi hacer el envio por HTTP. (Conceptos de Send Request y Get Response)..

Casimiro Notevi
07-08-2018, 10:17:33
Mira este hilo (http://www.clubdelphi.com/foros/showthread.php?t=89804&highlight=base64).