第一課:檔案操作【剽取其一,加解密】
對於初學者而言,檔案寫入和讀出很陌生,這一環可以說是蠻深奧的,小編也算是剛接觸了,不過呢,小編有點心得,有的都不會寫出來,但是思路在。
經過蒐集了一些說法和體會,不得不說,這門檔案操作學到最後也是寂寞天堂。可能用於程式加解密一環。往深奧方面說,只要計算機還在世,你就有出頭之地。
下面,小編就檔案讀出和寫入,淺入交流:
首先,寫入的方式和讀出的方式有幾種,小編取一做交流的題材。
我們在想寫檔案操作時,就得用到一個檔案,小編就用最簡單的File檔案。
它的標頭檔案,在你寫到
#include <iostream> using namespace std; int main () {
system("pause"); return 0; }
File也在<iostream>這個標頭檔案包含在內了。
既然做好準備了,那麼開始逐步實現檔案操作的寫法了。
當然寫一段程式前,要把你想寫的內容寫出來,具體想實現什麼功能。
1.建立檔案流
2.開啟檔案
<1>判斷檔案開啟是否成功
3.寫入和讀出
<當你想寫入時,就得注意:1.所寫入的檔案存在不存在 2.如果存在,就得避免被重新寫入的可能,把原有資料覆蓋掉 3.如果不存在,該如何創建出來>
4.關閉檔案流
1 void WriteToFile() 2 { 3 FILE* f_Writed = NULL; //寫入流物件 4 FILE* f_Read = NULL; //讀出流物件 5 6 //開啟檔案 7 f_Read = fopen("Mr.she.txt", "r"); //Mr.she.txt 就是要用到的檔名,小編先在專案下建立好了,‘r’只讀屬性,就是防止寫入的功能 8 //判斷檔案開啟是否失敗 9 if (!f_Read) 10 { 11 cout << "檔案開啟失敗!" << endl; 12 system("pause"); 13 return; 14 }15 16 f_Writed = fopen("Mr.jie.txt", "w"); 17 //判斷寫入時,檔案開啟與否 18 if (!f_Writed) 19 { 20 cout << "檔案開啟失敗!" << endl; 21 system("pause"); 22 return; 23 } 24 25 cout << "檔案開啟成功!" << endl; 26 27 //寫入和讀出 28 還沒寫呢 29 //關閉流物件 30 if (f_Writed || f_Read) 31 { 32 fclose(f_Writed); 33 fclose(f_Read); 34 } 35 }
寫到這裡,先執行下你的編譯器,只要能打出“檔案開啟成功!”就說明你寫得很成功,當然,這裡我們只用到了一個功能,那就是開啟,寫入流為何也要開啟,又為何要寫出來呢,“Mr.jie.txt”這個檔案就是我們要輸出的檔案。‘w’只寫屬性,當執行一次後,專案下只要沒有這個檔案,就會被創建出來。
為了更為直觀的瞭解和程式碼的實現,你可以在“Mr.she.txt”檔案寫點字元,當然在這裡呢,如果寫入文字效果的話,往後寫程式碼的話,你可能會懵逼,小編建議先寫入一些字母為好。
方便你能口頭眼目,讀出這些字元的位元組數。也為了編譯器更能直觀輸出時,你能看得懂。
feof(FILE* fp) 如果檔案結束,則返回非0值,否則返回0 EOF -1
假若你寫過一些檔案的話,小編就不搬門弄斧了,下面小編就會用到這個函式和EOF。
下面,就開始讀出和寫入的實現,前面說到,既然“Mr.she.txt”檔案內已經寫了一些英文字母,就說明,我們可以直接讀出來,再寫入到另一個檔案內“Mr.jie.txt”
{ //宣告一些需要用到的變數 char stringname[256] = {0}; //用來儲存檔案被讀出的資料 int ret = 0; //接收feof()狀態值 size_t readLength = 0; //接收fread()資料大小值 size_t writeLength = 0; //接收fwrite()資料大小值 //讀出、寫入檔案 while ((ret = feof(f_Read)) != EOF) { //讀出檔案,因為我們假設不知道檔案所寫的是什麼內容,檔案又不大的話,可以先設定為256 //當然sizeof(stringname)也行 readLength = fread((char*)stringname, sizeof(stringname),1, f_Read); //開啟檔案,依次將每讀出一塊資料,資料可以設定,然後寫入到檔案中 writeLength = fwrite((char*)stringname, readLength,1, f_Writed); //當讀取完畢,結束繼續讀,feof()這個函式會讀取2次 if (ret == feof(f_Read)) { system("pause"); break; } } //判斷當寫入和讀出兩個資料完全不同,則爆出提示錯誤,退出 if (readLength != writeLength) { cout << "寫入檔案失敗,請檢查是否磁碟溢滿!" << endl; } }
這一段就是先讀出“Mr.she.txt”檔案內容後寫入"Mr.jie.txt"檔案的實現方式。
不管對與不對,先執行下看看,編譯器編譯才是正理。
輸出的結果,在編譯器上是看不到的,因為已經輸出到"Mr.jie.txt"內了。開啟你的專案找到這個檔案,開啟就能看到一段字母,也就是你在“Mr.she.txt”檔案內寫的。