想要程序中的數據輸出到文件中,一共需要以下5個步驟:
① 包含fstream頭文件:#include <fstream>
② 建立ofstream對象:ofstream ocout;
③ 將對象與文件關聯:ocout.open(“test.txt”);
④ 使用該對象將數據輸出到文件test中:ocout<<”Hello,C++!”;
⑤ 關閉與文件的連接:ocout.close();
p.s. 在這裏我們應用ofstream的對象ocout將數據直接輸出到了文件中,而不是屏幕上!
完整程序示例:
特別注意的是,我們也可以把上面程序的第6和第7行合併爲一句話:
ofstream ocout("test.txt");
這句話的意思就是調用ofstream類中的構造函數來創建這個文本文件。另外,我們需要特別注意一點,在完成對整個文件的操作之後,一定要用close()函數將這個文件關閉了,否則在程序結束後,所操作的文件將什麼都不會保存下來!!!
- 讀取文件中的數據
打開文件讀取數據的方法和輸出數據到文集中的方法基本上是一樣的,同樣也需要5個步驟:
① 包含fstream頭文件:#include <fstream>
② 建立ifstream對象:ifstream icin;
③ 將對象與文件關聯:icin.open(“test.txt”);
④ 使用該對象讀取文件test中的數據到數組temp中:icin>>temp;
⑤ 關閉與文件的連接:icin.close();
p.s同上面一樣,我們也可以將第2步和第3步合併成一句話:
完整的程序示例:
可以看到,程序在命令行中顯示出來了test.txt文本文件中的內容。
- 如何讀取空格和空格後面的字符
我們在寫文件的時候,空格是不可避免的。但是由於C++的插入操作符有一個毛病,它只要一遇到空字符便會停止輸出。這裏的空字符就是空格,或者是’\0’。那麼這樣一來,如果我們在文件中有空格字符,那麼空格後面的字符就無法被輸出到屏幕上了。比如說,我們建立的test.txt文件中的內容爲:Hello C++!即把Hello後面的逗號改成空格,那麼重新運行該程序,輸出如下:
那麼有沒有什麼解決方法呢,當然是有的哈。用getline()函數嘛。下面粘一段MSDN上面關於getline()函數原型和參數的介紹哈:
首先是函數原型:
函數中的參數已經用黑體表示出來了哈,下面是參數說明:
好了,有了這個函數,我們就可以把上面的程序中的第10行改成:
另外,如果我們想要在命令行中寫一段話,而且這段換中包含了空格和回車,那麼我們就應該利用上面getline()函數的第三個參數,因爲一段話中有可能會有回車的出現,我們就必須利用getline()的第三個函數將默認的結束符號’\n’換成空字符‘\0’。這是由於空字符的ASCII碼爲0,我們不可能在文件中輸入空字符,因此這個時候,getline()函數會一直讀取到文件的末尾纔會結束。而如何停止用戶輸入呢?方法其實很簡單,在我們輸入完一段話之後,肯定會按下回車。之後我們就應該向該函數發出EOF標誌,即文件結束符標誌(End
Of File)。在命令行裏面發送文件結束符的方法是“Ctrl+Z”,之後再次按下回車鍵就能停止輸入了。
p.s. 空格不是空字符,它的ASCII碼爲32。
下面,咱們用一個實際的例子來演示一下:首先讀取一段話,然後將其輸出到文件中:
其運行的結果如下:
OK啦!!!程序輸出成功咯!!但是這個程序還有一個小小的瑕疵,注意看上面輸出結果,我們可以看到在命令行中“請按任意鍵繼續…”上面居然還有一個回車!這是怎麼回事呢?我們並沒有在多輸出一個回車啊?
其實是有的!!!!注意,我們在“!”之後回了一次車,然後才輸出了ctrl+Z,向getline()函數發送了一個文件結束的標誌。之後爲了讓程序結束,又按了一下回車。那麼這裏面第2次按下的回車由於超出了文件結束符EOF被自動拋棄了,但是,第一次按下的回車,就是!之後的那個回車卻沒有被丟棄掉,而是被寫入了temp1函數中。這個就是問題的所在。所以我們在輸出之後,會看到在“請按任意鍵繼續…”上面居然還有一個回車!對於這個問題,解決方法其實很簡單,我們只需要把最後一個Enter改成空字符’\0’就可以了。即在程序的13行之後添加上這樣兩句話:
好了,終於把這個程序搞定了,好麻煩!!!呼呼~~
這篇博文就記錄這麼多了,下次接着學習關於C++對文件的操作的方法,^_^