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

經由SPComm所接收的資料存檔時機

尚未結案
hwangtc
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-01 18:16:46 IP:203.75.xxx.xxx 未訂閱
使用SPComm由ReceiveData接收資料後,我想存成二進位檔, 檔案約在20K,請問在什麼時機存檔最合適? 因為SPComm的BUFFER只有4K左右 在找過KTOP所有相關的資訊都沒有人討論到這一點
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-02 10:29:33 IP:210.243.xxx.xxx 未訂閱
ReceiveData 後該次 Data 就清掉了, 所以你自己要準備一塊 Buffer 來儲存, 這跟一般的讀檔是一樣的 < > 至於甚麼時後存檔, 應該不用多說了吧 < > ( 把他當做一般的檔案讀寫 )
hwangtc
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-02 15:49:30 IP:203.75.xxx.xxx 未訂閱
謝謝shaofu的回應 大概是我沒說得很清楚 我在程式中一直開著spcom,經由com1,com2隨時standby接收資料 如果資料只是20K,那開BUFFER沒問題 如果資料以MB為單位呢,那又如何處理?
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-02 17:56:44 IP:210.243.xxx.xxx 未訂閱
引言: 謝謝shaofu的回應 大概是我沒說得很清楚 我在程式中一直開著spcom,經由com1,com2隨時standby接收資料 如果資料只是20K,那開BUFFER沒問題 如果資料以MB為單位呢,那又如何處理?
還是不太了解你的問題, 以你的需求來說, 最簡單的方法就直接在 ReceiveData 這個 Event 做檔案儲存的動作就好了, 整個問題與檔案大小沒關啊 至於 > 發表人 -
hwangtc
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-02 20:22:21 IP:203.75.xxx.xxx 未訂閱
謝謝shaofu 我原先是這樣寫的 procedure TForm1.FormCreate(Sender: TObject); begin file_name:='c:\temp\AAA.BBB'; Comm1.StartComm; end; procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var s:string; fFILE:File; ByteWrite:integer; begin AssignFile(fFILE,file_name); // 版本二 SetLength(S, BufferLength); Move(Buffer^, PChar(S)^, BufferLength); if fileexists(file_name) then reset(fFILE,1) else rewrite(fFILE,1); seek(fFILE,filesize(fFILE)); // 版本二 BlockWrite(fFILE,PChar(s)^,length(s),ByteWrite); // 版本一 // BlockWrite(fFILE,PChar(Buffer),BufferLength,ByteWrite); CloseFile(fFILE); end; 原先用版本一有問題,在猜想是不是可能TIMEOUT或RETRY或其它問題 (我知道的相當有限) 後來再依shaofu所提供的方向再從新思考 用版本二確是可行 再略加修改(如:s:=s #0;) 就可發現 4K Buffer 是蠻足夠了 再次謝謝shaofu
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-03 09:56:36 IP:210.243.xxx.xxx 未訂閱
引言: // 版本一 // BlockWrite(fFILE,PChar(Buffer),BufferLength,ByteWrite);
仔細看了一下, 是不是那邊不小心寫錯了 改成 >
hwangtc
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-03 10:43:05 IP:203.75.xxx.xxx 未訂閱
謝謝shaofu的指正 我已經被指標,變數...搞混了 基本概念都沒釐清 不曉得我說的對不對,像: procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]); 其中var Buf,要給的是變數'實體'或陣列,而不是指標 而我下了PChar(Buffer)是因為: procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); Buffer: Pointer是未定型態指標,我才會用PChar強制轉型,給果還是失敗 經用shaofu所提的 Buffer^ (取得變數實體??),經測試後確是可行 謝謝!!
系統時間:2024-03-29 3:58:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!