They cannot be used on handles that do not support FileSeek() (sockets, pipes, stdin/stdout etc.).


Well, it would be better if it could

You can just incrementally resize the return array, when reading succeeds after seeking fails.

I have a string load function doing that:

https://github.com/benibela/bbutils/blob/master/bbutils.pas#L3652




  Is it possible to extend this same set of functions to writing? Naturally I need to write back to the file now and the same problem
presents itself.  I have to search through other code bases to find a
function or Google and find


Writing a file should write the data in a temporary file and then rename the temporary file to replace the target file. Otherwise it might destroy the target file, without writing the new content, when there is an error. Although not even renaming is always safe, some people say you need a filesystem-specific transaction log.



Benito

On 06.10.2020 10:12, Michael Van Canneyt via fpc-pascal wrote:



No, we don't deal in magic, only bits and bytes :-)

I added the following functions to the sysutils unit (rev 47056):

// Read raw content as bytes

Function GetFileContents(Const aFileName : RawByteString) : TBytes;
Function GetFileContents(Const aFileName : UnicodeString) : TBytes;
Function GetFileContents(Const aHandle : THandle) : TBytes;

// Read content as string

// Assume TEncoding.SystemEncoding
Function GetFileAsString(Const aFileName : RawByteString) : RawByteString;
// Specify encoding
Function GetFileAsString(Const aFileName : RawByteString; aEncoding : TEncoding) : RawByteString;
// Assume TEncoding.Unicode contents
Function GetFileAsString(Const aFileName : UnicodeString) : UnicodeString;
// Specify encoding, return Unicode string.
Function GetFileAsString(Const aFileName : UnicodeString; aEncoding : TEncoding) : UnicodeString;

These functions will raise an exception if the file cannot be opened or read. They cannot be used on handles that do not support FileSeek() (sockets, pipes, stdin/stdout etc.).

I did some tests on encoding conversion but not extensively. If you find any errors, please report them through the bugtracker.

Michael.
_______________________________________________
fpc-pascal maillist  - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to