請問TMemoryStream的問題 |
尚未結案
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
小弟最近實作常常運用TMemoryStream來讀檔(txt檔)變成AnsiString的格式
但小弟發現,使用TMemoryStream來讀檔一定得用個char array來存他所讀的值,但卻會發生有時在最後會有讀進不該讀的東西(多了一些東西),請問各位高手,怎樣才能正確的使用TMemoryStream來讀檔案(TXT檔),由於我的Txt檔有一些加密的資料,所以不能使用TStringList來讀,會有問題,所以只能用TMemoryStream來讀,但常常會發生問題,小弟就把我的方法提出來,可否給我一個建議?? TMemoryStream *file=new TMemoryStream();
file->LoadFromFile(CurrentDir "\\agent.tmp");
char *buf=new char[file->Size 1];
memset(buf,0x00,file->Size 1);
memcpy(buf,file->Memory,file->Size); 有其他比較正確無誤的讀檔方式嗎??
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
willchen您好:
我沒有您的加密資料,不過我以下面的範例說明
1.txt的內容為[這裡是Delphi KTOP討論區]
TMemoryStream* ms=new TMemoryStream(); ms->LoadFromFile("1.txt"); Memo1->Lines->LoadFromFile("1.txt"); Byte *data=new Byte [ms->Size]; ms->Read(data,ms->Size); //將1.txt內容存到data[]中 TMemoryStream* ms1=new TMemoryStream(); ms1->Write(data,ms->Size); //將data[]內容寫入2.txt中 ms1->SaveToFile("2.txt"); delete ms; delete ms1; delete [] data下圖是以UltarEdit開啟1.txt的畫面 下圖示以UltarEdit開啟並以16進制編輯1.txt的畫面 而用TMemoryStream讀到的值就為其內容 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 - |
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
為什麼要轉呢?您看到2.txt的內容了嗎??
請您再參考一下lcsboy版主的解說
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30852 發表人 - taishyang 於 2003/10/03 18:55:57
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
請恕小弟愚昧...我看了版主的文章之後,發現版主的上面的功能只是把檔案讀進Buffer,然後再用另一個TMemoryStream copy然後存檔這樣,那這樣如果當我要更改Buffer裡面的資料時,不是要先把buffer的東西先讀出成AnsiString格式,這樣才能更改不是嗎??那這樣跟使用memcpy的方式有不同嗎??因為小弟有時需要找buffer裡面的某個字元,此時,AnsiString的Pos就很有用,可以再透露一下,如何可以更改讀進buffer的東西,然後在存入,小弟是新手,請多多包函
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
willchen您好:
待小弟打完工回實驗室再說明
您可以調整ms->Positon來取得您要的資料
您試試下面的code
void __fastcall TForm1::Button1Click(TObject *Sender) { TMemoryStream* ms=new TMemoryStream(); ms->LoadFromFile("1.txt"); Memo1->Lines->LoadFromFile("1.txt"); Byte *data=new Byte [ms->Size]; ms->Position=4; ms->Read(data,ms->Size); TMemoryStream* ms1=new TMemoryStream(); ms1->Write(data,ms->Size-4); ms1->SaveToFile("2.txt"); delete ms; delete ms1; Memo2->Lines->LoadFromFile("2.txt"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { TMemoryStream* ms=new TMemoryStream(); ms->LoadFromFile("1.txt"); Memo1->Lines->LoadFromFile("1.txt"); Byte data[2]; //ms->Position=2; 加上這一行會顯示"裡" ms->Read(data,2); TMemoryStream* ms1=new TMemoryStream(); ms1->Write(data,2); ms1->SaveToFile("2.txt"); delete ms; delete ms1; Memo2->Lines->LoadFromFile("2.txt"); } //---------------------------------------------------------------------------這樣應該很清楚了吧< > 順心< > ~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 - taishyang 於 2003/10/03 22:54:44 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |