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() 重置以上成員函式所檢查的狀態標誌