TFileStream 中 ReadBuffer 的問題。 |
答題得分者是:Justmade
|
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
試試
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 發送簡訊給我 |
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 發送簡訊給我 |
這個我也不能很清楚的解釋,但動態設定的 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |