線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1845
推到 Plurk!
推到 Facebook!

BlockRead讀取檔案

缺席
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-18 22:53:54 IP:61.218.xxx.xxx 訂閱
我利用下面的這段代碼讀取檔案,雖然是用Buf接資料,但隨即轉給Result,應該沒有長度的問題,但發現,讀取的資料比原本的資料還多,請問,Buf的長度有關係嗎,謝謝!

[code delphi]
function myreader(filename:string):string;
var karf:file;
Buf:array[1..1024] of Char;
NumRead:integer;
begin
if not fileexists(fn) then abort;
AssignFile(karf,fn);
Reset(karf,1);
repeat
BlockRead(karF,Buf,SizeOf(Buf),NumRead);
if NumRead>0 then result:=result strtohex(buf);
until NumRead=0;
end;

[/code]

pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-18 23:59:38 IP:61.218.xxx.xxx 訂閱
還是找不出問題,怕是觀念上的問題,用另一個方式達到目的,貼出來分享。

[code delphi]
function myreader(fn:string):string;
var fs:TStream;
buff:array [0..65535] of Byte;
tt:integer;
begin
fs:=TFileStream.Create(fn,fmOpenRead);
try
while fs.Position fs.Read(buff,SizeOf(buff));
for tt:=0 to fs.Size-1 do
result:=result bytetohex(buff[tt]);
finally
fs.Free;
end;
end;

[/code]
xbx
一般會員


發表:0
回覆:10
積分:12
註冊:2003-08-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-28 12:30:39 IP:218.13.xxx.xxx 訂閱
会有问题的。因为buf是char 类型,该类型是以\0表示一个字符串的结束。
如果重用时,记得要先清零再用。如:memset(buf,0x00,sizeof(buf));即可。
问题产生的原因:
假设:第1次:buf读入123456,则buf中存放:[1,2,3,4,5,6,\0,\0...]
第2次,buf读入ABC,因为没清零,则会存放:[A,B,C,4,5,6,\0,\0...]。
所以在第2次读入之前,清零即可。
系統時間:2024-04-20 16:43:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!