c++讀取文件操作和寫入文件


在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();

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM