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

一個檔案,能只讀取其中某部份到記憶體嗎?

答題得分者是:qoo1234
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-09 17:11:02 IP:203.204.xxx.xxx 未訂閱
之所以提出這個問題是最近我想在網路上傳送一個粉大的檔案,如500MB 我的直接的想法就是將檔案切割許多的小檔案傳過去在組起來,因此我想問的是一個500mb的檔案,是否能只讀取某一段位置到記憶體中呢,如一次只讀1MB到記憶體。這種idea在實作上是可行的嗎?謝謝?
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-09 17:48:29 IP:61.56.xxx.xxx 未訂閱
引言: 之所以提出這個問題是最近我想在網路上傳送一個粉大的檔案,如500MB 我的直接的想法就是將檔案切割許多的小檔案傳過去在組起來,因此我想問的是一個500mb的檔案,是否能只讀取某一段位置到記憶體中呢,如一次只讀1MB到記憶體。這種idea在實作上是可行的嗎?謝謝?
BlockRead可以做到,這是你要的嗎?
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-09 18:26:44 IP:61.225.xxx.xxx 未訂閱
//BlockRead基本語法 procedure BlockRead ( var FileHandle : File; var Buffer; RecordCount : Integer {; var RecordsRead : Integer} ) ; 發表人 - qoo1234 於 2003/05/09 18:50:10
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-09 18:34:18 IP:61.225.xxx.xxx 未訂閱
{這是使用記憶體區塊讀寫方式.} procedure FileCopy(const FromFile, ToFile: string); var FromF, ToF: file; NumRead, NumWritten: Word; Buf: array[1..2048] of Char; begin AssignFile(FromF, FromFile); Reset(FromF, 1); { Record size = 1 } AssignFile(ToF, ToFile); { Open output file } Rewrite(ToF, 1); { Record size = 1 } repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); end; 發表是最好的記憶! 發表人 - qoo1234 於 2003/05/09 18:49:03 發表人 - qoo1234 於 2003/05/09 23:51:54
solnone
中階會員


發表:2
回覆:97
積分:69
註冊:2003-05-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-09 22:50:41 IP:203.66.xxx.xxx 未訂閱
建議你使用 TFileStream 來做… var fs: TStream; buff: array [0..65535] of Byte; // buffer begin fs := TFileStream.Create(filename, fmOpenRead); try while fs.Position < fs.Size do begin fs.Read(buff, SizeOf(buff)); // you can send buff end; finally fs.Free; end; end;
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-09 23:50:13 IP:61.216.xxx.xxx 未訂閱
{這是使用 File stream的程序.} Procedure FileCopy( Const sourcefilename, targetfilename: String ); Var S, T: TFileStream; Begin S := TFileStream.Create( sourcefilename, fmOpenRead ); try T := TFileStream.Create( targetfilename, fmOpenWrite or fmCreate ); try T.CopyFrom(S, S.Size ) ; finally T.Free; end; finally S.Free; end; End; 發表是最好的記憶!
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-10 00:48:25 IP:203.204.xxx.xxx 未訂閱
在這邊要謝謝所有回覆的人,其實每個人都想給分的,實在是站長太小氣只能給一個,呵呵呵,謝謝大家啦。
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-10 00:56:42 IP:203.204.xxx.xxx 未訂閱
對了,我後來才看到solnone 大大的那段回覆,哈哈。真怪,之前竟然沒看到,發現蠻符合我的需求的,這邊要特別說聲謝謝。
系統時間:2024-05-16 23:09:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!