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

TFileStream 中 ReadBuffer 的問題。

答題得分者是:Justmade
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-20 22:07:53 IP:218.174.xxx.xxx 未訂閱
請問當我去 Creat 一個 TFileStream 的實體後,要去 ReadBuffer 時為何第 一個參數無法使用動態陣列只能用靜態陣列,或有無其它解決的方法。謝謝。
------
我也在努力學習中,若有錯謬請見諒。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-20 23:19:55 IP:218.16.xxx.xxx 未訂閱
試試
procedure TForm1.Button1Click(Sender: TObject);
var
FS : TFileStream;
Buf : Array [0..15] of Char;
Stream : Array of Char;
Read, i : Integer;
begin
  FS := TFileStream.Create('D:\Temp\beta.txt',fmOpenRead);
  repeat
    read := FS.Read(Buf,16);
    SetLength(Stream,Length(Stream)   Read);
    for i := 0 to read - 1 do
      Stream[Length(Stream) - Read   i] := Buf[i];
  until read < 16;
  showmessage(String(Stream));
end;
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-21 14:33:44 IP:163.15.xxx.xxx 未訂閱
Buf:array of Byte; begin SetLength(Buf, range); Source := TFileStream.Create(MyPath,fmShareDenyWrite); Source.ReadBuffer(Buf,range); ---------------------------------------------------------- 為何如此會出現 ReadError? 因為無法確定當下的Buffer大小所以才會用動態的方式,謝謝。
------
我也在努力學習中,若有錯謬請見諒。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-21 15:12:46 IP:218.16.xxx.xxx 未訂閱
這個我也不能很清楚的解釋,但動態設定的 Array 若傳入 Var 的參數經常會變得不隱定,我自已也還攪不清楚為甚麼會這樣,望高手加入指教。 不過,我上便的程式就是專為不清楚 Buffer Size 而設。 靜態陣列的 Buf 每次只讀取最多 16 bytes 且記下實質讀了幾多 bytes, 然後按讀了多少 Byte 來動態的加大 動態陣列的 Stream 並將資料轉移過去。若讀滿 16 Byte 則繼續讀取及轉移,直至讀取的少於 16 byte 即檔案結束為止。 所以這個程序無論是 1 byte 的或是 1 G 的檔案都能讀入 Stream 並設對 Length, 不過對大檔案不是很有效率就是了。若是檔案通常較大,最好加大 Buf。
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-22 11:44:08 IP:163.15.xxx.xxx 未訂閱
Justmade, 我測試過了,真的太帥了,謝謝。
------
我也在努力學習中,若有錯謬請見諒。
系統時間:2024-05-08 8:30:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!