我需要直接从驱动器读取文件,而无需任何系统缓冲。我在这里尝试了这段代码How to unload a file from cache?不幸的是,我收到错误消息“扩展内存流时内存不足”。它发生在我试过的任何文件中。后来我发现SrcStream.Size的返回值总是-1。所以显然问题在这里,问题是为什么会发生这种情况?“扩展内存流时内存不足”
uses
MMSystem;
function GetTimeForRead(ABuffered: boolean): single;
const
FileToRead = // name of file with maybe 500 MByte size
var
FlagsAndAttributes: DWORD;
FileHandle: THandle;
SrcStream, DestStream: TStream;
Ticks: DWord;
begin
if ABuffered then FlagsAndAttributes := FILE_ATTRIBUTE_NORMAL
else FlagsAndAttributes := FILE_FLAG_NO_BUFFERING;
FileHandle := CreateFile(FileToRead, GENERIC_READ, FILE_SHARE_READ, nil,OPEN_EXISTING, FlagsAndAttributes, 0);
if FileHandle = INVALID_HANDLE_VALUE then
begin
Result := 0.0;
exit;
end;
SrcStream := THandleStream.Create(FileHandle);
try
DestStream := TMemoryStream.Create;
try
DestStream.Size := SrcStream.Size;
Ticks := timeGetTime;
DestStream.CopyFrom(SrcStream, SrcStream.Size);
Result := 0.001 * (timeGetTime - Ticks);
finally
DestStream.Free;
end;
finally
SrcStream.Free;
end;
end;
我明白了,问题就在那里。你可以看到我的手指在哪里,对吗? –
隐形手指指向隐形代码?哇,这个互联网的东西真的很酷。 –
此错误消息不显示 FlagsAndAttributes:= FILE_ATTRIBUTE_NORMAL 但它总是与 崩溃FlagsAndAttributes:= FILE_FLAG_NO_BUFFERING; –