1. 程式人生 > 實用技巧 >第一課:檔案操作【剽取其一,加解密】

第一課:檔案操作【剽取其一,加解密】

對於初學者而言,檔案寫入和讀出很陌生,這一環可以說是蠻深奧的,小編也算是剛接觸了,不過呢,小編有點心得,有的都不會寫出來,但是思路在。

經過蒐集了一些說法和體會,不得不說,這門檔案操作學到最後也是寂寞天堂。可能用於程式加解密一環。往深奧方面說,只要計算機還在世,你就有出頭之地。

下面,小編就檔案讀出和寫入,淺入交流:

首先,寫入的方式和讀出的方式有幾種,小編取一做交流的題材。

我們在想寫檔案操作時,就得用到一個檔案,小編就用最簡單的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”檔案內寫的。