全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1885
推到 Plurk!
推到 Facebook!

問一個有關讀檔,寫檔的問題

答題得分者是:cmf
Ansonku
一般會員


發表:13
回覆:15
積分:5
註冊:2002-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-26 12:18:58 IP:61.220.xxx.xxx 未訂閱
我遇到一個問題,不知道有沒有人可以幫我一下的 問題如下... 開一個檔案...用binary格式開啟 然後寫入數字1 到9 然後關閉檔案 在開啟大個檔案...用binary格式開啟 然後讀取裡面內容....把他印出來 我得程式如下    int main(int argc, char* argv[]) {         ofstream fout("out.txt",ios::binary) ;         for(int i=1;i<10;i ) { fout.write((char*)&i,sizeof(int)) ; } fout.close() ; int j ; ifstream fin("out.txt",ios::binary) ; while(!fin.eof) { fin.read((char*)&j,sizeof(int)) ; cout << j << endl ; //cout << "讀後位置" << fin.tellg() << endl ; } fin.close() ; return 0; } 考試我遇到一個問題就是 印出來的答案是 1 2 3 4 5 6 7 8 9 9 照理說當讀到eof()時不是就會停止了嗎? 怎麼多讀了一次 也就是說當讀完9時...fin.tellg()=36(因為9個int...每個4bytes) 為什麼不是讀完9次就停止....他卻讀了10次.... 請各位大大如果有人知道的可以回答一下 謝謝
Ansonku
一般會員


發表:13
回覆:15
積分:5
註冊:2002-10-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-26 17:12:29 IP:61.220.xxx.xxx 未訂閱
找到一個間接的方法 可以在檔案的前頭加上一個counter.... 這樣檔案一開就可以先去讀counter就知道要讀多少值了 用了一下午....po一下用ifstream跟ofstream的心得 開檔的模式有 Flag Names Effects ios_base::in Open file for reading ios_base::out Open file for writing ios_base::ate Start position is at file end ios_base::app Append file; that is, always write to the end of the file ios_base::trunc Truncate file; that is, delete file content ios_base::binary Binary mode 這幾種 如果你要判斷檔案是否存在可以用ios::nocreate 如果檔案不存在則file.open()會傳回來false值 如果你是要續寫檔案可以用ios::app或ios::ate 但如果你使用這兩種模式的條件之下,想要回頭去寫第0個byte的地方 使用ios::seekp()..當你把檔案指標指到前面去後...別以為他就可以繼續重seekp()的地方開始寫....他還是會從最後開始寫...因為我們剛剛是用ios::app的模式開啟....所以囉....你如果想要從ios::seekp()的地方開始寫... 你可以用此模式開啟ios::in ps..如果你是寫ofstream file(filename) ; 則如果檔案存在的話,則此檔案會被覆蓋掉... 如果想要不備覆蓋掉的話可以用 ofstream file(file,ios::in) ; 這樣你就可以用檔案指標移來移去也可以寫來寫去.... 講的有點雜....有誤請指證....謝謝
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-26 17:52:37 IP:61.70.xxx.xxx 未訂閱
int j ; ifstream fin("out.txt",ios::binary) ; while(!fin.eof) {  j=0;  fin.read((char*)&j,sizeof(int)) ;  if (j != 0)  cout << j << endl ;     if  (fin.eof) break;  }    fin.close() ;    return 0; }         發表人 - cmf 於 2003/02/04 00:06:31
------
︿︿
系統時間:2024-06-27 3:09:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!