C 學習筆記之對檔案的操作 1

2022-07-18 07:42:14 字數 3264 閱讀 9310

*************************==前言*************************==

我們在編寫程式的時候,最密不可分的就是對檔案進行相應的操作,我們可以從檔案中讀取資料,可以將資料儲存到檔案,可以……

總而言之,言而總之,一言以蔽之,對檔案的操作是非常重要的,下面我們就來介紹一下c++中是如何對檔案進行操作的。

*************************==功能展示*************************==

想要程式中的資料輸出到檔案中,一共需要以下5個步驟:

① 包含fstream標頭檔案:#include

② 建立ofstream

物件:ofstream ocout;

③ 將物件與檔案關聯:ocout.open(「test.txt」);

④ 使用該物件將資料輸出到檔案test中:ocout<

⑤ 關閉與檔案的連線:ocout.close();

p.s. 在這裡我們應用ofstream的物件ocout將資料直接輸出到了檔案中,而不是螢幕上!

完整程式示例:

#include using namespace std;

int main()

執行程式後,我們就會在程式的目錄下發現乙個test.txt檔案,開啟之後會顯示「hello,c++!」。如下圖所示

特別注意的是,我們也可以把上面程式的第6和第7行合併為一句話:

ofstream ocout("test.txt");
這句話的意思就是呼叫ofstream類中的建構函式來建立這個文字檔案。另外,我們需要特別注意一點,在完成對整個檔案的操作之後,一定要用close()函式將這個檔案關閉了,否則在程式結束後,所操作的檔案將什麼都不會儲存下來!!!

開啟檔案讀取資料的方法和輸出資料到文集中的方法基本上是一樣的,同樣也需要5個步驟:

① 包含fstream標頭檔案:#include

② 建立ifstream

物件:ifstream icin;

③ 將物件與檔案關聯:icin.open(「test.txt」);

④ 使用該物件讀取檔案test中的資料到陣列temp中:icin>>temp;

⑤ 關閉與檔案的連線:icin.close();

p.s同上面一樣,我們也可以將第2步和第3步合併成一句話:

ifstream icin("test.txt");
它的作用就是呼叫ifstream類中的建構函式來讀取這個本地的文字檔案。

完整的程式示例:

#include #include using namespace std;

int main()

;//初始化陣列temp1

char temp2[num]=;//初始化陣列temp2

//① 輸出資料到檔案text.txt中

ofstream f_out("text.txt");

cout<

cin.getline(temp1,num,0);

f_out對整個程式的分析:

① 輸出資料到檔案text.txt中

首先我們在第11行定義了乙個檔案的輸出流物件f_out,並用該物件建立了乙個text.txt文字檔案。之後在程式的第13行採用getline()函式接受文字內容,並將其放到temp1字元陣列中。注意,這裡的getline()函式的第三個引數為空字元,說明它可以接受空格,並且只有達到檔案的末尾才能停止讀取使用者的鍵盤輸入。好了,如果我們輸入完檔案之後按下ctrl+z,那麼接著再次按下enter回車鍵就會停止輸入。之後在程式的第14行,我們用ofstream的物件fout將緩衝區中的內容輸出到文字檔案text.txt中。最後關閉這個檔案。

② 將檔案text.txt中的內容重新讀回螢幕上

同輸出一樣,首先我們在程式的第17行定義了乙個檔案的輸入流物件f_in,並用該物件讀取了剛剛建立的text.txt文字檔案。之後又呼叫getlin()函式將檔案中的內容輸出到了字元陣列temp2中,之後運用cout來輸出temp2陣列的內容到螢幕上。這樣一來,我們就完成了對檔案的輸入輸出操作。

其執行的結果如下:

ok啦!!!程式輸出成功咯!!但是這個程式還有乙個小小的瑕疵,注意看上面輸出結果,我們可以看到在命令列中「請按任意鍵繼續…」上面居然還有乙個回車!這是怎麼回事呢?我們並沒有在多輸出乙個回車啊?

其實是有的!!!!注意,我們在「!」之後回了一次車,然後才輸出了ctrl+z,向getline()函式傳送了乙個檔案結束的標誌。之後為了讓程式結束,又按了一下回車。那麼這裡面第2次按下的回車由於超出了檔案結束符eof被自動拋棄了,但是,第一次按下的回車,就是!之後的那個回車卻沒有被丟棄掉,而是被寫入了temp1函式中。這個就是問題的所在。所以我們在輸出之後,會看到在「請按任意鍵繼續…」上面居然還有乙個回車!對於這個問題,解決方法其實很簡單,我們只需要把最後乙個enter改成空字元』\0』就可以了。即在程式的13行之後新增上這樣兩句話:

int n=strlen(temp1);

temp1[n-1]='\0';

第一句話的意思就是讀取字元陣列temp1中可見字元的長度,並儲存到整型變數n中;第二句話的意思就是找到儲存enter鍵的元素的下標,然後將這個下標的元素賦值成空字元就可以了。完整的程式如下:

#include #include using namespace std;

int main()

;//初始化陣列temp1

char temp2[num]=;//初始化陣列temp2

//① 輸出資料到檔案text.txt中

ofstream f_out("text.txt");

cout<

cin.getline(temp1,num,0);

int n=strlen(temp1);

temp1[n-1]='\0';

f_out然後是程式的輸出:

好了,終於把這個程式搞定了,好麻煩!!!呼呼~~

這篇博文就記錄這麼多了,下次接著學習關於c++對檔案的操作的方法,^_^

C 對檔案操作

c 建立目錄 建立目錄c sixage directoryinfo d directory.createdirectory c sixage d1指向c sixage sixage1 directoryinfo d1 d.createsubdirectory sixage1 d2指向c sixage...

c 對檔案操作

獲得當前絕對路徑 指定的路徑 絕對路徑 非web程式引用 return 刪除單個檔案 檔案相對路徑 public static bool deletefile string filepath if file.exists fullpath return false 刪除上傳的檔案 及縮圖 publi...

C 對檔案的操作

c 對檔案的操作方式有兩種 1 通過file類對檔案進行操作 2 通過檔案流對檔案進行操作 file類是乙個靜態類 因此可以直接使用類名去呼叫方法 有以下方法對檔案進行操作 1 exist 判斷指定路徑下的檔案是否存在,形參為指定路徑,存在則返回true 不存在則返回false 2 move 將原來...