問一個有關讀檔,寫檔的問題 |
答題得分者是:cmf
|
Ansonku
一般會員 發表:13 回覆:15 積分:5 註冊:2002-10-23 發送簡訊給我 |
我遇到一個問題,不知道有沒有人可以幫我一下的
問題如下...
開一個檔案...用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 發送簡訊給我 |
找到一個間接的方法
可以在檔案的前頭加上一個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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |