作者flax00298 (NI)
看板C_and_CPP
標題[問題] 幾個FSTREAM的小問題
時間Mon Aug 3 09:59:51 2009
很久以前修課的時候
教授丟給我們的期末專案
是文書編輯器
那時候連個物件都不太會宣告
最近把它寫寫看的時候
遇到了幾個FSTREAM的問題
1.
我看C++ PRIMIER上面寫說
在宣告一個FSTREAM物件的時候
OPEN一個檔案
如果那個檔案不存在
就會幫你CREATE
可是我試過了好像不是這麼一回事??
怎麼開不存在的檔案都是失敗的
2.
我試圖用IFSTREAM讀.TXT裡面的字串
我測試了一下
比如說~我的內容是:
hello
world
然後用ifstream的物件呼叫>>複製到傳統C字串裡面
CODE的話是這樣
fstr>>str; 出來是hello
fstr>>str>>str; 出來就變成了world
如果我呼叫getline一次或兩次,效果跟上面一樣
所以其實>>和getline是在做同樣的事情嗎?
我又試了呼叫get
http://www.cplusplus.com/reference/iostream/istream/get/
然後我用的是這個get:
istream& get ( char* s, streamsize n );
他裡面的說明是說
超出size或是遇到'\n'的時候會結束
呼叫一次也是hello
再呼叫一次就變成什麼都沒有了
我看了看原因是因為
本來的hello的第一個,也就是h變成了'\0'
然後函數理所當然也因為遇到'\0'就結束了
這樣的話起始的地方不就每次都從'\0'開始了嗎
要怎麼解決這個問題呢?
有辦法直接控制他從哪裡開始讀嗎?
3.
如果說要COPY檔案所有的內容
到一堆自串矩陣裡面
我要怎麼得知他在哪一行已經結束了?
例如說我為了要COPY文件的字串一開始開了5000個
到底的時候再創五千個繼續存
現在文件只有100行
我要怎麼讓迴圈適可而止呢?
4.
http://www.cplusplus.com/reference/iostream/fstream/open/
這個網頁說
The function effectively calls rdbuf()->open(filename,mode).
但是我一直想不通直接用串流物件呼叫OPEN就好了阿
effectively是??
不好意思文章很冗長
謝謝各位看完
小弟表達能力不佳
傷害各位的眼睛了ˊˋ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.233.148.84
推 kameng:2的 >>遇到" "或換行都會停 getline只會遇到換行才停 08/03 12:40
→ kameng:3. 你看看你指的是不是.eof() 到文件最後就會停止 08/03 12:42
→ kameng:4 我自己通常都在建立的時候就一起宣告檔案地址 很少會用到 08/03 12:43
→ kameng:open 08/03 12:44
→ kameng: 位 08/03 12:44
→ flax00298:=口=...真的耶...有路徑就會創造,只有檔名就不會 08/03 15:39
→ flax00298:太感謝了~奔多問題都一起解決了!!阿里家多!! 08/03 15:40
→ flax00298:搞錯了...還是沒有辦法解決問題一... 08/03 15:53
→ flax00298:不好意思~請問宣告檔案位址和OPEN的使用的關係是? 08/03 15:54
→ kameng:或者說得不清楚吧 如果你的object只寫或讀一個檔案的話 08/03 19:46
→ kameng:通常在宣布這個object時我們都會連檔案名一起宣告 08/03 19:48
→ kameng:fstream a("xxx.txt",ios::XXX)這樣,省卻了要呼叫一次open 08/03 19:48
→ kameng:的步驟 所以其實..也不會經常用到open 反倒是close一定要用 08/03 19:49
→ kameng:剛測試了,只有ofstream可以在檔案不存在時建立新的檔案 08/03 20:32
→ kameng:fstream跟ifstream都要檔案存在才能繼續 08/03 20:33