1. 程式人生 > >c++ 檔案的簡單操作

c++ 檔案的簡單操作

檔案的讀取操作

在程式設計中,檔案常用的操作不外乎——開啟、讀、寫、流指標操作、關閉。我日常中使用的比較多,但從來 沒有細細總結今天就總結下具體的用法。

相關概念

計算機上的檔案其實是資料的集合,對檔案的讀寫其實是對資料的讀寫。
檔案可以大致分為兩種:文字檔案和二進位制檔案。  
1、文字檔案:它的每一個位元組存放的是一個ASCII碼,代表一個字元。
2、二進位制檔案:將記憶體中的資料按照其在記憶體中的儲存形式原樣存放在磁碟上。我們用記事本開啟則是亂碼。

檔案的路徑

檔案的相對路徑(重在理解)——英文的雙引號
定義:目標檔案相對於當前檔案的路徑。
表達形式:
(1)"./“或”.”表示顯示當前目錄,也可以省略,表示預設當前目錄
(2)”…/"或”…”表示返回到上一級的目錄。
(3)如果有多個上一級目錄,可以使用多個“…/”或”…”。

檔案的開啟方式

(三)檔案的開啟方式
ios::in 以輸入方式開啟檔案,支援讀資料流。如果檔案不存在會找不到檔案。
ios::out 以輸出方式開啟檔案,支援寫資料流。如果檔案不存在則新建,如果檔案存在就清空其原有內容。
ios::app 輸出的資料追加到檔案末尾,只支援讀,不支援寫
ios::ate 開啟一個檔案,並將指標定位到檔案末尾
ios::trunc 開啟一個檔案,如果檔案不存在則新建,如果存在,則清空原有檔案中的內容
ios::binary 以二進位制方式開啟檔案,如果不指定則預設採用文字方式開啟檔案
說明:
①預設時,預設為以輸出和輸入方式開啟檔案,支援讀和寫資料流。
②當以多種形式開啟檔案時,中間用運算子”|”(或)連線起來。如:
ios::in | ios::out 以輸出和輸入方式開啟檔案
ios::out| ios::binary 以輸出方式開啟一個二進位制檔案

資料流物件指標(簡稱“流指標”)

對檔案進行讀寫操作首先必須要定義一個數據流物件指標。資料流物件指標有三種類型,在這裡我只介紹一種我最常用的方式:fstream(標頭檔案#include<fstream>
表示檔案讀取/寫入流,對檔案進行讀和寫操作,既可以將資料從儲存裝置讀取到記憶體中,也可以將資料從記憶體寫入儲存裝置中。
下面程式碼例項:

fstream  f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);//定義一個名為f1的資料流指標,並且以in/out/trunc方式開啟檔案,支援讀和寫操作。
    if(!f1)cout<<"未找到檔案"<<endl;

獲取流指標的位置

(1)tellg( )
根據ANSI-C++ 標準,就是一個整數,代表當前讀取流指標的位置;
long long m=f1.tellg( );//返回f1的位置
*設定讀取流指標的位置
①seekg ( pos_type position );
(2)tellp( )
根據ANSI-C++ 標準,就是一個整數,代表當前寫入流指標的位置;
long long m=f2.tellp( );//返回f2的位置

*設定寫入流指標的位置
①seekp ( pos_type position );

檔案的開啟與關閉操作

*檔案的open函式的具體使用:eg

         fstream f1,f2;//定義一個名為f1的資料流指標
         f1.open("D:\\a.txt"); //以讀和寫方式開啟D盤中的a.txt檔案,與f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);這種方式結果一致。
         F2.open(“../a.txt”.ios::in);//以讀方式開啟當前目錄的上級目錄中的a.txt檔案

*檔案的關閉
檔案的關閉非常重要,每次使用後必須關閉,不然會造成其他後果。
f1。close();即可

文字檔案的寫操作——符號”<<”

①定義一個數據指標流;(注:根據寫操作選擇對應的資料指標流型別)
②表達形式:資料指標流 << 被寫入的物件;

char  b[]="李虎ftv控制代碼飽和度iyivbh oguobhnynbubo8ubu0nn  88898 76y8 9980 bhh";
    int i=0;
    fstream  f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);//定義一個名為f1的資料流指標
    if(!f1)cout<<"未找到檔案"<<endl;
    f1.seekg(ios::beg);  //重置資料流指標
    for (i=0;i<strlen(b);i++)
    {
        f1<<b[i];//依次將數組裡面的東西寫入檔案中。

    }

文字檔案的讀操作——符號”>>”

①定義一個數據指標流;(注:根據讀操作選擇對應的資料指標流型別)
②表達形式:資料指標流 >> 讀取後儲存的物件;
注意:讀取資料時按照檔案中資料的格式讀取。

法一:
nt  b[10];
fstream f2;//定義一個名為f2的資料流指標
    f2.open("D:\\a.txt"); //以讀和寫方式開啟D盤中的a.txt檔案
for (int i = 0; i < 10; i++) {
        f1 >> b[i] ;  //讀取時會根據檔案中的格式讀取。
    }
f2.close();//關閉檔案
//法二:
//char  b[]
    //f1.open("D:\\DAAT.txt"); //以讀和寫方式開啟D盤中的a.txt檔案
    //if(!f1)cout<<"未找到檔案"<<endl;
    //f1.seekg(ios::beg);  //重置資料流指標
    //f1.getline(b,80,EOF);eof()函式是判斷檔案是否讀到了末尾。
    //cout<<b<<endl;

二進位制檔案的讀和寫操作

此處我沒有整理,大家可以參考他的這篇文章,寫的很詳細:https://blog.csdn.net/weixin_43956598/article/details/90694117;

檔案的其他函式操作

Is_open( ) 判斷檔案是否處於開啟的狀態。如果是,返回true;如果不是,返回false

eof() 判斷讀檔案是否到達檔案末尾。如果是,返回true;如果不是,返回false

bad() 如果在讀寫過程中出錯,返回 true 。例如:當我們要對一個不是開啟為寫狀態的檔案進行寫入時,或者我們要寫入的裝置沒有剩餘空間時,就會報錯。

fail() 除了與bad() 同樣的情況下會返回 true 以外,加上格式錯誤時也返回true ,例如當想要讀入一個整數,而獲得了一個字母的時候。

good() 這是最通用的:如果呼叫以上任何一個函式返回true 的話,函式返回 false 。

clear() 重置以上成員函式所檢查的狀態標誌