在C++中與讀取檔案和寫入檔案簡單操作有關的類分別有ifstream(檔案讀入)、ofstream(檔案寫出)、fstream (檔案讀入和寫出),
名稱 | 作用 |
---|---|
ifstream | 檔案讀入 |
ofstream | 檔案寫出 |
fstream | 檔案讀入和寫出 |
對于檔案操作操作輸入輸出類中具有一個open的函式用來打開檔案使用的,其原型為:
void open(const char* filename,int mode,int access);
其中各個引數的含義如下表:
引數 | 作用 |
---|---|
filename | 需要打開的檔案地址名稱 |
mode | 打開檔案的方式 |
access | 打開檔案的屬性 |
其中打開檔案的方式在類中ios中定義的常用值為下表,在使用程序中可以用“|”把以上屬性連接起來表或的關系,如ios::out|ios::binary
mode常用的值 | 作用 |
---|---|
ios::app | 以追加的方式打開檔案 |
ios::ate | 檔案打開后定位到檔案尾,ios:app就包含有此屬性 |
ios::binary | 以二進制方式打開檔案,預設的方式是文本方式,兩種方式的區別見前文 |
ios::in | 檔案以輸入方式打開(檔案資料輸入到記憶體) |
ios::out | 檔案以輸出方式打開(記憶體資料輸出到檔案) |
ios::nocreate | 不建立檔案,所以檔案不存在時打開失敗 |
ios::noreplace | 不覆寫檔案,所以打開檔案時如果檔案存在失敗 |
ios::trunc | 如果檔案存在,把檔案長度設為0 |
打開檔案的屬性取值是:
access常用的值 | 作用 |
---|---|
0 | 普通檔案,打開訪問 |
1 | 只讀檔案 |
2 | 隱含檔案 |
4 | 系統檔案 |
再打開檔案的程序中,僅需要呼叫open函式就可以打開檔案并對檔案內容進行操作,如
查看代碼
ofstream myfile("F:\\zmxs\\date.txt",ios::app);
myfile<<"寫入!"<<endl;
myfile.close();
由上面可以看出在寫入和寫出時,用到了一個重要的運算子插入器(<<),其實在stream類中存在兩個重要的運算分別是插入器(<<)和析取器(>>)在c++中cin和cout經常可以被看到它主要實作的I/O操作,下面對插入器和析取器進行解釋:
1、插入器(<<)
向流輸出資料,比如說系統有一個默認的標準輸出流(cout),一般情況下就是指的顯示幕,所以,cout<<"Write Stdout"<<'\n';就表示把字串"Write Stdout"和換行字符('\n')輸出到標準輸出流,
2、析取器(>>)
從流中輸入資料,比如說系統有一個默認的標準輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標準輸入流中讀取一個指定型別的資料,
同時檔案操作完成后需要對檔案進行關閉,讓檔案進行保存,使用myfile.close();myfile為你定義這個操作名稱,
使用者在操作O的時候,常常使用到檔案指標,通俗來講就是你在編輯文本檔案時插入文本的位置,被稱為檔案指標,對檔案指標的位置我們可以通過seekg函式進行操作
檔案指標位置在c++中的用法:
seekg常用的值 | 含義 |
---|---|
ios::beg | 檔案頭 |
ios::end | 檔案尾 |
ios::cur | 當前位置 |
舉個栗子:
file.seekg(0,ios::beg); //讓檔案指標定位到檔案開頭
file.seekg(0,ios::end); //讓檔案指標定位到檔案末尾
file.seekg(10,ios::cur); //讓檔案指標從當前位置向檔案末方向移動10個位元組
file.seekg(-10,ios::cur); //讓檔案指標從當前位置向檔案開始方向移動10個位元組
file.seekg(10,ios::beg); //讓檔案指標定位到離檔案開頭10個位元組的位置
常用的錯誤判斷方法:
good() 如果檔案打開成功
bad() 打開檔案時發生錯誤
eof() 到達檔案尾
檔案操作的代碼解釋
查看代碼
#include<iostream>
#include <string>
#include<fstream>
#include<istream>
using namespace std;
int main()
{
ofstream outfile("F:\\zmxs\\date.txt",ios::app);
if(outfile.good())
{
outfile<<"寫入!"<<endl;
outfile.close();
}
string temp;
ifstream myfile("F:\\zmxs\\date.txt");
///直接使用while會讀取不到第一行
do
{
myfile >> temp;
cout<<temp<<endl;
}while(getline(myfile,temp));
myfile.close();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/393834.html
標籤:C++
上一篇:Java除錯器卡在vscode中
下一篇:返回列表