|
@@ -35,8 +35,8 @@ type
|
|
class procedure RaiseLastError;
|
|
class procedure RaiseLastError;
|
|
function Read(var Buffer; Count: Cardinal): Cardinal; virtual; abstract;
|
|
function Read(var Buffer; Count: Cardinal): Cardinal; virtual; abstract;
|
|
procedure ReadBuffer(var Buffer; Count: Cardinal);
|
|
procedure ReadBuffer(var Buffer; Count: Cardinal);
|
|
- procedure Seek(Offset: Cardinal);
|
|
|
|
- procedure Seek64(Offset: Integer64); virtual; abstract;
|
|
|
|
|
|
+ procedure Seek(Offset: Int64); virtual; abstract;
|
|
|
|
+ procedure Seek64(Offset: Int64);
|
|
procedure WriteAnsiString(const S: AnsiString);
|
|
procedure WriteAnsiString(const S: AnsiString);
|
|
procedure WriteBuffer(const Buffer; Count: Cardinal); virtual; abstract;
|
|
procedure WriteBuffer(const Buffer; Count: Cardinal); virtual; abstract;
|
|
property CappedSize: Cardinal read GetCappedSize;
|
|
property CappedSize: Cardinal read GetCappedSize;
|
|
@@ -61,7 +61,7 @@ type
|
|
constructor CreateWithExistingHandle(const AHandle: THandle);
|
|
constructor CreateWithExistingHandle(const AHandle: THandle);
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
function Read(var Buffer; Count: Cardinal): Cardinal; override;
|
|
function Read(var Buffer; Count: Cardinal): Cardinal; override;
|
|
- procedure Seek64(Offset: Integer64); override;
|
|
|
|
|
|
+ procedure Seek(Offset: Int64); override;
|
|
procedure SeekToEnd;
|
|
procedure SeekToEnd;
|
|
procedure Truncate;
|
|
procedure Truncate;
|
|
procedure WriteBuffer(const Buffer; Count: Cardinal); override;
|
|
procedure WriteBuffer(const Buffer; Count: Cardinal); override;
|
|
@@ -84,7 +84,7 @@ type
|
|
constructor CreateFromZero(const ASize: Cardinal);
|
|
constructor CreateFromZero(const ASize: Cardinal);
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
function Read(var Buffer; Count: Cardinal): Cardinal; override;
|
|
function Read(var Buffer; Count: Cardinal): Cardinal; override;
|
|
- procedure Seek64(Offset: Integer64); override;
|
|
|
|
|
|
+ procedure Seek(Offset: Int64); override;
|
|
procedure WriteBuffer(const Buffer; Count: Cardinal); override;
|
|
procedure WriteBuffer(const Buffer; Count: Cardinal); override;
|
|
property Memory: Pointer read FMemory;
|
|
property Memory: Pointer read FMemory;
|
|
end;
|
|
end;
|
|
@@ -196,9 +196,9 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TCustomFile.Seek(Offset: Cardinal);
|
|
|
|
|
|
+procedure TCustomFile.Seek64(Offset: Int64);
|
|
begin
|
|
begin
|
|
- Seek64(To64(Offset));
|
|
|
|
|
|
+ Seek(Offset);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TCustomFile.WriteAnsiString(const S: AnsiString);
|
|
procedure TCustomFile.WriteAnsiString(const S: AnsiString);
|
|
@@ -248,15 +248,14 @@ begin
|
|
FILE_ATTRIBUTE_NORMAL, 0);
|
|
FILE_ATTRIBUTE_NORMAL, 0);
|
|
end;
|
|
end;
|
|
|
|
|
|
-const
|
|
|
|
- INVALID_SET_FILE_POINTER = DWORD($FFFFFFFF);
|
|
|
|
-
|
|
|
|
function TFile.GetPosition: Integer64;
|
|
function TFile.GetPosition: Integer64;
|
|
begin
|
|
begin
|
|
- Result.Hi := 0;
|
|
|
|
- Result.Lo := SetFilePointer(FHandle, 0, @Result.Hi, FILE_CURRENT);
|
|
|
|
- if (Result.Lo = INVALID_SET_FILE_POINTER) and (GetLastError <> 0) then
|
|
|
|
|
|
+ { Store into an Int64 as it has 8-byte alignment, just in case the function
|
|
|
|
+ wants that (but it probably doesn't care) }
|
|
|
|
+ var LPosition: Int64;
|
|
|
|
+ if not SetFilePointerEx(FHandle, 0, @LPosition, FILE_CURRENT) then
|
|
RaiseLastError;
|
|
RaiseLastError;
|
|
|
|
+ Result := LPosition;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TFile.GetSize: Integer64;
|
|
function TFile.GetSize: Integer64;
|
|
@@ -273,20 +272,15 @@ begin
|
|
RaiseLastError;
|
|
RaiseLastError;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TFile.Seek64(Offset: Integer64);
|
|
|
|
|
|
+procedure TFile.Seek(Offset: Int64);
|
|
begin
|
|
begin
|
|
- if (SetFilePointer(FHandle, Integer(Offset.Lo), @Offset.Hi,
|
|
|
|
- FILE_BEGIN) = INVALID_SET_FILE_POINTER) and (GetLastError <> 0) then
|
|
|
|
|
|
+ if not SetFilePointerEx(FHandle, Offset, nil, FILE_BEGIN) then
|
|
RaiseLastError;
|
|
RaiseLastError;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TFile.SeekToEnd;
|
|
procedure TFile.SeekToEnd;
|
|
-var
|
|
|
|
- DistanceHigh: Integer;
|
|
|
|
begin
|
|
begin
|
|
- DistanceHigh := 0;
|
|
|
|
- if (SetFilePointer(FHandle, 0, @DistanceHigh, FILE_END) = INVALID_SET_FILE_POINTER) and
|
|
|
|
- (GetLastError <> 0) then
|
|
|
|
|
|
+ if not SetFilePointerEx(FHandle, 0, nil, FILE_END) then
|
|
RaiseLastError;
|
|
RaiseLastError;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -393,9 +387,9 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TMemoryFile.Seek64(Offset: Integer64);
|
|
|
|
|
|
+procedure TMemoryFile.Seek(Offset: Int64);
|
|
begin
|
|
begin
|
|
- if Offset.Hi and $80000000 <> 0 then
|
|
|
|
|
|
+ if Offset < 0 then
|
|
RaiseError(ERROR_NEGATIVE_SEEK);
|
|
RaiseError(ERROR_NEGATIVE_SEEK);
|
|
FPosition := Offset;
|
|
FPosition := Offset;
|
|
end;
|
|
end;
|