请教TFileStream.Seek函数为啥定位总不正确。

dreamnyj 2014-10-25 10:43:52
FileStream := TfileStream.create(OpenDialog1.FileName,fmOpenRead );//正常


fileStream.Seek($0,soBeginning );
fileStream.Read(Buffer,100);//个人理解是从0处读可是不是,如果换成soCurrent 就会从0处读

fileStream.Seek($200,soBeginning);// 理解是从开始位 offset 0x200开始读,结果不知道读那去了。但是如果换成Socurrent就正常了。理论上,前面已经读到了100,这里不是0X300了?
fileStream.Read(Buffer,100);

fileStream.Seek($500,soBeginning);//理解,offset 0x500开始读,结果不知道读到那里,但我用ultraEdit步0x500,一定不是读的内容。

fileStream.Read(Buffer,100);

//TMD 为什么Seek函数总是不能正常的定位?


引用到VCL中这样定义:
type
{ TStream seek origins }
TSeekOrigin = (soBeginning, soCurrent, soEnd);


求指教,使用版本D7。
...全文
289 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sundayzhao 2014-10-27
  • 打赏
  • 举报
回复
你看一下源码,filestream.seek最终调用SetFilePointer函数,这个函数要求便宜量为integer,你传入的64位可能太大了,所以不准确,或者windows中病毒了,系统函数就不正确。呵呵 可以考虑用TStringStream,就可以了
号称比 DELPHI 自带的 zlib 更快 ...Hello,you can found an optimized version of Zlib 1.2.1 that you can embed into every Delphi executable without use external dlls.Further I have build a little example hoping to aid "young" Delphi programmers getting in trouble with streams...Please let me know if you‘ll discover errors.These objects and sources are targeted for executing into P6+ CPU core, and Delphi5-6-7-x software.Benchmarks show this zlib 40% average faster than native DLL distribution and 100% reliable (original test of zlib 1.1.4 version).How to compress and decompress a file:procedure TForm1.Button1Click(Sender: TObject);var InputStream, OutputStream: TFileStream; DeCompressionStream: TZDecompressionStream; CompressionStream: TZCompressionStream; InputFileName, OutputFileName: string;begin//compress InputFileName := ‘c:image.png‘; OutputFilename := ‘c:image.png.bzip‘; InputStream := TFileStream.Create(InputFileName, fmOpenRead); OutputStream := TFileStream.Create(OutputFileName, fmCreate); CompressionStream := TZCompressionStream.Create(OutputStream, zcFastest); CompressionStream.CopyFrom(InputStream, InputStream.Size); CompressionStream.Free; OutputStream.Free; InputStream.Free;// decompress InputFileName := ‘c:image.png.bzip‘; OutputFilename := ‘c:image2.png‘; //rename to original into final code InputStream := TFileStream.Create(InputFileName, fmOpenRead); OutputStream := TFileStream.Create(OutputFileName, fmCreate); DecompressionStream := TZDecompressionStream.Create(InputStream); OutputStream.CopyFrom(DecompressionStream, 0); DecompressionStream.Free; OutputStream.Free; InputStream.Free;end;Cheers,Roberto Della Pasqua,www.dellapasqua.com.Btw: these sources code of zlib 1.2.1 aren‘t changed by me and now I get some compiler warnings, but don‘t worry: they are only little hints about code sintax (cross-platform C compiler typical behavior).

16,743

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧