Consulta Delphi

Producto: Delphi

Version: XE

Tengo un problema con la instrucción SysUtils.FileWrite en Delphi XE y consiste en que le envío la instrucción para que me escriba una línea en un fichero plano y escribe sólo la mitad pero con caracteres [Null] en medio de cada uno de ellos.

La instrucción sigue el ejemplo exacto del que se muestra en la ayuda:

La Línea que intenta escribir es:

’29/03/2011 09:42:01 PAGINADOR: PAGINADOR/INDEXADOR MODO AUTOMATICO’#$D#$A

Y la línea que escribe es:

2[null]9[null]/[null]0[null]3[null]/[null]2[null]0[null]1[null]1[null] [null]0[null]9[null]:[null]4[null]2[null]:[null]0[null]1[null] [null]P[null]A[null]G[null]I[null]N[null]A[null]D[null]O[null]R[null]:[null] [null]P[null]A

La función es:

Function fFileWriteString(aFileHandle: Integer;
aBuffer : String;
aCount : LongWord): Boolean;
Var bBuffer: PChar;
i : Integer;
Begin
Result := True;
Try
GetMem(bBuffer, aCount); // Allocate the buffer.

For i := Uno to aCount do
bBuffer[i – Uno] := aBuffer[i];

i := SysUtils.FileWrite(aFileHandle, bBuffer^, aCount);

If i < Cero then
Result := False;
Finally
FreeMem(bBuffer, aCount);
End; // Try
end; // Funct


 

Respuestas

La función FileWrite es una función directa de Windows que se mapea en Delphi, la función concreta es WriteFile de la librería de Windows Kernel32.dll con la siguiente Invocación

WriteFile (Thandle(Handle), Buffer, Count, LongWord(Result), nil);

Para el comportamiento extraño que describe el no se me ocurre nada más que dos explicaciones:

1- Que esté desarrollando sobre un sistema operativo no soportado, https://www.danysoft.com/free/Delphi_Datasheet_A4.pdf
2- Que el manejador del fichero se haya creado como un fichero de strings ANSI y no UNICODE. De todas maneras esta última no explicaría por qué unas veces sí y otras no.

He podido notar que se muestra la cadena por la mitad pero correctamente, si el tamaño (aCount) es un Número Par (aunque el tamaño del string escrito en realidad es completo, o sea que los nulos los pasa al final), en cambio si el tamaño es un número Impar, se muestra la cadena de igual tamaño, pero con los [Null] incorporados, como en el ejemplo que he mostrado.

Este fallo no me aparece en Delphi 7.


Artículos Relacionados

webinar docker

Datasnap sobre Docker con Delphi.

En el webinar vamos a profundizar en la utilización de Dockers con Delphi, y en el soporte que ofrece, utilizando una de las tecnologías más punteras para el desarrollo en múltiples capas como es DataSnap.186579

03/05/2022

Seguir leyendo  

Promociones: Delphi y C++Builder 11 Alexandria

Consigue tus licencias Delphi y C++Builder en las mejores condiciones. Te ofrecemos el mejor precio del mercado y el valor añadido para que incorpores sus ventajas lo antes posible. 161079

22/04/2022

Seguir leyendo  

RAD Studio Alexandria 11.1 disponible

RAD Studio 11.1 es una versión centrada en la calidad que mejora la usabilidad, el rendimiento y la estabilidad de las potentes funciones de RAD Studio 11184741

17/03/2022

Seguir leyendo  

Pruebas Unitarias con Delphi

En el webinar abordaremos la realización de Pruebas Unitarias con Delphi, y la utilización de las mejores prácticas para convertirlas en una herramienta clave para la calidad del código. 181371

20/02/2022

Seguir leyendo  

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
¡Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.