我正在处理流文件,但是"内存不足"发生了错误。我想我必须逐字节地读取流。然后我用这个方法加载一个文件:
fs := TFileStream.Create("c:\a\a.avi", fmOpenRead or fmShareDenyWrite) ;
接下来我重置流位置:
fs.positon:=0;
然后我试图读取流的第一个字节:
var
oneByte:byte;
begin
fs.Read(oneByte,2);
但它没有正常工作。我的错误在哪里?
答案 0 :(得分:5)
字节大小为1而不是2
fs.Read(oneByte, 1);
使用SizeOf()函数
可以轻松防止此类错误fs.Read(oneByte, SizeOf(oneByte));
另一方面,Read
返回读取的字节数,以指示整个读取是否成功。您需要检查该返回值以处理错误。
首选的习惯用法是改用ReadBuffer
。这将调用Read
并在出现错误时引发异常。
正如@David Heffernan所指出的,逐字节读取文件流并不是最有效的方法。看看Buffered files (for faster disk access)