有關TMemoryStream的操作方法 |
答題得分者是:justdo
|
jonesyeah
一般會員 ![]() ![]() 發表:6 回覆:5 積分:2 註冊:2004-10-30 發送簡訊給我 |
我寫了一個測試的程式,因為不大熟操作方法,所以有些錯誤。請幫忙改正一下
感謝~~
int a=10;
TMemoryStream *ms=new TMemoryStream;
ms->Position=0;
//這一行是必要的嗎?
ms->Write(IntToStr(a).c_str(),IntToStr(a).Length());
//有把int轉成 void *更好的方法嗎?
//如果我要轉的是一整個class,可以嗎?
ms->SaveToFile("1.txt");
//此時1.txt裡應該是10
ms->LoadFromFile("1.txt");
ms->Read(&a,1);
//這裡有錯,不會用read..
//我想把讀到的東西丟進a裡面
//這函式跟readbuffer有差別嗎?
//如果是整個class那又該怎麼作?
a=a-48;
//char轉為int
Edit1->Text=a;
//輸出
|
justdo
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
int a=50; TMemoryStream *ms=new TMemoryStream; ms->Position=0; ms->Write(&a,sizeof(a)); //用&取得變數a的位址 ms->SaveToFile("1.txt"); ms->LoadFromFile("1.txt"); ms->Read(&a,sizeof(a)); //第二個參數為變數a的大小 a=a-48; Edit1->Text=a;當你原先用IntToStr(a)的時候,會將整數10轉換成字串"10" 在寫回來的時候還需要進行將字串轉回數字 然而這時候無法知道字串的長度,顯然要讀取原先的資料回來有其困難 再加上Write可以處理整數,這樣轉換實在是多此一舉 另外,我查了source code, WriteBuffer會轉呼叫Write 所以兩個使用上應該是沒有差別... 但Write既然為virtual函式, 理論上使用者應該是呼叫WriteBuffer即可 不過呼叫Write也不會有任何問題 |
jonesyeah
一般會員 ![]() ![]() 發表:6 回覆:5 積分:2 註冊:2004-10-30 發送簡訊給我 |
引言:嗯嗯..大概瞭解用法了,可是我將上述的程式碼其中一行加入a=1; 然後再把a寫入檔案裡的值,可是之後的Edit1->Text還是等於1, 沒有被寫進檔案裡的值耶.int a=50; TMemoryStream *ms=new TMemoryStream; ms->Position=0; ms->Write(&a,sizeof(a)); //用&取得變數a的位址 ms->SaveToFile("1.txt"); a=1; ms->LoadFromFile("1.txt"); ms->Read(&a,sizeof(a)); //第二個參數為變數a的大小 //a=a-48; Edit1->Text=a;當你原先用IntToStr(a)的時候,會將整數10轉換成字串"10" 在寫回來的時候還需要進行將字串轉回數字 然而這時候無法知道字串的長度,顯然要讀取原先的資料回來有其困難 再加上Write可以處理整數,這樣轉換實在是多此一舉 另外,我查了source code, WriteBuffer會轉呼叫Write 所以兩個使用上應該是沒有差別... 但Write既然為virtual函式, 理論上使用者應該是呼叫WriteBuffer即可 不過呼叫Write也不會有任何問題 |
justdo
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
|
jonesyeah
一般會員 ![]() ![]() 發表:6 回覆:5 積分:2 註冊:2004-10-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |