读取文件问题(100分)

  • 主题发起人 主题发起人 qiangyao
  • 开始时间 开始时间
Q

qiangyao

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个文件,600mb,*.dat,未加密,我要读出其内容,取出某些数据,怎样实现
 
RichEdit.Lines.loadFile(...);
 
能更详细些码?
 
RichEdit.Lines.loadFile(...);
不行啊
 
我用fileopen,但返回的Buffer是空的[:(!][^]
 
var
YourFile: File;
Buffer: array[0..256] of byte;
NumRecordsRead: Integer;
begin
AssignFile(YourFile, 'Yourfile.dat');
Reset(YourFile);
try
BlockRead(YourFile, Buffer, 1, NumRecordsRead)
finally
CloseFile(YourFile);
end;
end;
 
你要先了解其数据存放格式,以dat为扩展名的文件很多,只要开发者原意,他可以把任
何文件做成*.dat。以前有的软件出于加密考虑,甚至把软件中部份EXE文件伪装成.dat。
如果不知道格式,就用BIN方式操作文件。
 
详细点,比如贴出一部分文件中的内容,或说出格式
 
该文件其实是一个记录顺序文件,我想知道的记录的开始和结束,算出字节大小
,然后根据记录长度读取记录,我现在想知道的是,怎样按照字节读文件。
 
用TFILESTREAM,可以随便当成任何简单类型读写
也可以再关联上TWRITER和TREADER

按照字节读文件,最老土的是用FILE OF BYTE,或者FILE OF CHAR类型来打开文件;
此外,如果你是打开文件出错了,你需要注意FILEMODE是否和文件属性相悖,也许你的文件是
READONLY,但是默认FILEMODE是READWRITE,那么你该修改FILEMODE为FMREADONLY
 
wenyue你好:
能给些更详细的代码吗?我还要判断ASCII码
 
filestream

look in help
 
Var F:File of byte;
b:byte;
begin
assignfile(F,FileName);
reset(F);
while not eof(F) do
begin
read(F,b); //b is the ord of ascii
do something;
end;
closefile(F);
end;

or use TFileStream

Var Strm:TFileStream;
Buf:Array of byte;
begin
Strm:=TFileStream.Create(FileName,fmOpenRead);
setLength(Buf,Strm.Size);
Strm.read(Buf[0],Strm.Size); //一次性将文件的内容读入BUF这个数组
Strm.Free;

end;

BTW:这样的问题我看最好还是看点基础的书来得更快些,那样可以得到系统的学习
 
谢谢wenyue,利用你的思想我已经解决了问题。我以前主要用c++做活
现在因工作变动,转到delphi,有些不得劲
 
我给你发一个原代码
 
后退
顶部