C++ 文件操做(一)

一、數據輸出到文件(ofstream開啓一個可供輸出的文件)ios

C++文件操做包括輸入、輸出、拷貝、批處理。緩存

  • ofstream:寫操做(輸出)的文件類(由ostream引伸而來)
  •  ifstream:讀操做(輸入)的文件類(由istream引伸而來)
  • fstream:可同時讀寫操做的文件類(由iostream引伸而來)

將簡單的數據流輸出到文件,只須要下面幾步:session

首先要申明一個類的對象實例,將對象與文件相關聯(也就是打開文件)。對這個流對象實例的輸入輸出操做就是對文件的操做。app

 1 #include<fstream>//包含fstream文件
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     ofstream outfile;//創建ofstream對象
 7     outfile.open("test.txt");//將對象與文件關聯
 8     outfile<<"Hello,world!";//使用file對象將數據輸出到test.txt文件中
 9     outfile.close();//關閉與文件的鏈接
10     return 0;
11 }

程序運行結果:在程序源文件的同級目錄下生成test.txt文件。函數

ps:若是指定的文件不存在,會有一個文件被產生出來並做爲輸出之用。若是指定的文件已經存在,這個文件會被開啓做爲輸出之用,而文件中原已存在的數據會被丟棄。spa

因爲對類ofstream,ifstream和fstream的對象所進行的第一個操做一般都是打開文件,這些類都有一個構造函數能夠直接調用open函數,並擁有一樣的參數。因此能夠經過如下方法實現上面程序的第6行和第7行的效果:指針

ofstream outfile("test.txt");

二、成員函數open()code

函數原型:對象

void open(
    const char *_Filename,
    ios_base::openmode _Mode = ios_base::in | ios_base::out,
    int _Prot = (int)ios_base::_Openprot
);
void open(
    const char *_Filename,
    ios_base::openmode _Mode
);
void open(
    const wchar_t *_Filename,
    ios_base::openmode _Mode = ios_base::in | ios_base::out,
    int _Prot = (int)ios_base::_Openprot
);
void open(
    const wchar_t *_Filename,
    ios_base::openmode _Mode
);

參數說明:blog

_Filename
The name of the file to open.
打開文件名

_Mode
One of the enumerations in ios_base::openmode.
文件的打開方式(在ios_base::openmode中定義)

_Prot
The default file opening protection.
默認進行文件打開時的保護

ios_base::openmode中定義的打開方式:

ios::in, to permit extraction from a stream.
打開文件進行讀操做,即讀取文件中的數據

ios::out, to permit insertion to a stream.
打開文件進行寫操做,即輸出數據到文件中

ios::app, to seek to the end of a stream before each insertion.
打開文件以後文件指針指向文件末尾,只能在文件末尾進行數據的寫入

ios::ate, to seek to the end of a stream when its controlling object is first created.
打開文件以後文件指針指向文件末尾,可是能夠在文件的任何地方進行數據的寫入

ios::trunc, to delete contents of an existing file when its controlling object is created.
默認的文件打開方式,若文件已經存在,則清空文件的內容

ios::binary, to read a file as a binary stream, rather than as a text stream.
打開文件爲二進制文件,不然爲文本文件

類ofstream,ifstream和fstream的成員函數open都包含了一個默認打開文件的mode:

1 ofstream -> ios::out|ios::trunc
2 ifstream -> ios::in
3 fstream  -> ios::in|::ios::out

三、檢驗文件是否開啓成功

    文件有可能開啓失敗,在進行寫入操做以前,咱們必須肯定文件的確開啓成功。

(1)最簡單的方法是檢驗class object的真僞:

 
 1   #include<fstream>//包含fstream文件
 2   #include<iostream>//cerr須要包含iostream頭文件
 3   using namespace std;
 4 
 5   int main()
 6   {
 7       ofstream file("test.txt");//創建對象並將對象與文件關聯
 8       if(!file)
 9      {
10          //若是file的計算結果爲false,表示此文件並未開啓成功
11          cerr<<"Oops!Unable to save session data!\n";
12      }
13       file.close();//關閉與文件的鏈接
14       return 0;
15   }

ps:cerr表明標準錯誤輸出設備。cerr和cout的區別:

①cerr不通過緩衝區,直接向顯示器輸出信息,而cout中的信息存放在緩衝區,緩衝區滿或者遇到endl時才輸出。。

②cout輸出的信息能夠重定向,而cerr只能輸出到標準輸出(顯示器)上。

(2)調用成員函數is_open();

bool is_open();//返回bool值,爲true表明文件成功打開
 1 // ifstream::is_open
 2 #include <iostream>    
 3 #include <fstream>      
 4 using namespace std;
 5 
 6 int main () {
 7   ifstream file("test.txt");
 8 
 9   if (file.is_open()) {
10     //其餘代碼
11    cout<<"Succeed opening file";
12   }
13   else {
14     // show message:
15     cout<<"Error opening file";
16   }
17 
18   return 0;
19 }

四、關閉文件

當文件讀寫操做完成以後,咱們必須將文件關閉以使文件從新變爲可訪問的。

調用成員函數close()函數關閉文件,負責將緩存中的數據排放出來並關閉文件。

void close();

這個函數一旦被調用,初識聲明的流對象就能夠被用來打開其餘文件,這個文件也能夠重修被其餘進程訪問。

ps:爲防止流對象被銷燬時還關聯着打開的文件,析構函數將會自動調用關閉函數close()。

相關文章
相關標籤/搜索