看板 C_and_CPP 關於我們 聯絡資訊
很久以前修課的時候 教授丟給我們的期末專案 是文書編輯器 那時候連個物件都不太會宣告 最近把它寫寫看的時候 遇到了幾個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