From d5cbe6809b29bc33501018cd253bfb54ccc914fd Mon Sep 17 00:00:00 2001 From: michael Date: Tue, 6 Oct 2020 07:59:09 +0000 Subject: [PATCH] * Add GetFileContents and GetFileAsString git-svn-id: trunk@47055 - --- rtl/objpas/sysutils/filutil.inc | 74 ++++++++++++++++++++++++++++++++ rtl/objpas/sysutils/filutilh.inc | 9 ++++ 2 files changed, 83 insertions(+) diff --git a/rtl/objpas/sysutils/filutil.inc b/rtl/objpas/sysutils/filutil.inc index 29e33f915f..301e37f98d 100644 --- a/rtl/objpas/sysutils/filutil.inc +++ b/rtl/objpas/sysutils/filutil.inc @@ -670,3 +670,77 @@ begin Result:= False; end; {$endif} + +Function GetFileContents(Const aFileName : RawByteString) : TBytes; + +Var + H : Thandle; + +begin + H:=FileOpen(aFileName,fmOpenRead or fmShareDenyWrite); + if H<0 then + Raise EFileNotFoundException.Create(SFileNotFound); + try + Result:=GetFileContents(H); + finally + FileClose(H); + end; +end; + +Function GetFileContents(Const aFileName : UnicodeString) : TBytes; + +Var + H : Thandle; + +begin + H:=FileOpen(aFileName,fmOpenRead or fmShareDenyWrite); + if H<0 then + Raise EFileNotFoundException.Create(SFileNotFound); + try + Result:=GetFileContents(H); + finally + FileClose(H); + end; +end; + +Function GetFileContents(Const aHandle : THandle) : TBytes; + +Var + aLen,aOffset,aRead : Int64; + aBuf : PByte; + +begin + aLen:=FileSeek(aHandle,0,fsFromEnd); + FileSeek(aHandle,0,fsFromBeginning); + SetLength(Result,aLen); + aOffset:=0; + Repeat + aBuf:=@Result[aOffset]; + aRead:=FileRead(aHandle,aBuf^,aLen-aOffset); + aOffset:=aOffset+aRead; + Until (aOffset>=aLen) or (aRead<=0); + if aRead<0 then + RaiseLastOSError; +end; + +Function GetFileAsString(Const aFileName : RawByteString; aEncoding : TEncoding) : RawByteString; + +begin + Result:=aEncoding.GetAnsiString(GetFileContents(aFileName)); +end; + +Function GetFileAsString(Const aFileName : RawByteString) : RawByteString; + +begin + Result:=GetFileAsString(aFileName,TEncoding.SystemEncoding); +end; + +Function GetFileAsString(Const aFileName : UnicodeString) : UnicodeString; +begin + Result:=GetFileAsString(aFileName, TEncoding.Unicode); +end; + +Function GetFileAsString(Const aFileName : UnicodeString; aEncoding : TEncoding) : UnicodeString; +begin + Result:=aEncoding.GetString(GetFileContents(aFileName)) +end; diff --git a/rtl/objpas/sysutils/filutilh.inc b/rtl/objpas/sysutils/filutilh.inc index b827340e09..651deb9a34 100644 --- a/rtl/objpas/sysutils/filutilh.inc +++ b/rtl/objpas/sysutils/filutilh.inc @@ -229,3 +229,12 @@ Function FileGetDate (Handle : THandle) : Int64; Function FileSetDate (Handle : THandle;Age : Int64) : Longint; Function GetFileHandle(var f : File):THandle; Function GetFileHandle(var f : Text):THandle; + +Function GetFileContents(Const aFileName : RawByteString) : TBytes; +Function GetFileContents(Const aFileName : UnicodeString) : TBytes; +Function GetFileContents(Const aHandle : THandle) : TBytes; +Function GetFileAsString(Const aFileName : RawByteString) : RawByteString; +Function GetFileAsString(Const aFileName : RawByteString; aEncoding : TEncoding) : RawByteString; +Function GetFileAsString(Const aFileName : UnicodeString) : UnicodeString; +Function GetFileAsString(Const aFileName : UnicodeString; aEncoding : TEncoding) : UnicodeString; +