[問題] 幾個FSTREAM的小問題

看板C_and_CPP (C/C++)作者 (NI)時間16年前 (2009/08/03 09:59), 編輯推噓1(1014)
留言15則, 2人參與, 最新討論串1/1
很久以前修課的時候 教授丟給我們的期末專案 是文書編輯器 那時候連個物件都不太會宣告 最近把它寫寫看的時候 遇到了幾個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

08/03 12:40, , 1F
2的 >>遇到" "或換行都會停 getline只會遇到換行才停
08/03 12:40, 1F

08/03 12:42, , 2F
3. 你看看你指的是不是.eof() 到文件最後就會停止
08/03 12:42, 2F

08/03 12:43, , 3F
4 我自己通常都在建立的時候就一起宣告檔案地址 很少會用到
08/03 12:43, 3F

08/03 12:44, , 4F
open
08/03 12:44, 4F

08/03 12:44, , 5F
08/03 12:44, 5F

08/03 15:39, , 6F
=口=...真的耶...有路徑就會創造,只有檔名就不會
08/03 15:39, 6F

08/03 15:40, , 7F
太感謝了~奔多問題都一起解決了!!阿里家多!!
08/03 15:40, 7F

08/03 15:53, , 8F
搞錯了...還是沒有辦法解決問題一...
08/03 15:53, 8F

08/03 15:54, , 9F
不好意思~請問宣告檔案位址和OPEN的使用的關係是?
08/03 15:54, 9F

08/03 19:46, , 10F
或者說得不清楚吧 如果你的object只寫或讀一個檔案的話
08/03 19:46, 10F

08/03 19:48, , 11F
通常在宣布這個object時我們都會連檔案名一起宣告
08/03 19:48, 11F

08/03 19:48, , 12F
fstream a("xxx.txt",ios::XXX)這樣,省卻了要呼叫一次open
08/03 19:48, 12F

08/03 19:49, , 13F
的步驟 所以其實..也不會經常用到open 反倒是close一定要用
08/03 19:49, 13F

08/03 20:32, , 14F
剛測試了,只有ofstream可以在檔案不存在時建立新的檔案
08/03 20:32, 14F

08/03 20:33, , 15F
fstream跟ifstream都要檔案存在才能繼續
08/03 20:33, 15F
文章代碼(AID): #1ATaIOTP (C_and_CPP)
文章代碼(AID): #1ATaIOTP (C_and_CPP)