1. 程式人生 > >C++ fstream 檔案流

C++ fstream 檔案流

C++ ,中,所有的I/O操作 都以 stream 類 為 基類,包括我們要認識檔案I/O,stream這個類有兩個重要的運算子:

1、插入器(<<)
  向流輸出資料。比如說系統有一個預設的標準輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"Write Stdout"<<' ';就表示把字串"Write Stdout"和換行字元(' ')輸出到標準輸出流。

2、析取器(>>)
  從流中輸入資料。比如說系統有一個預設的標準輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標準輸入流中讀取一個指定型別(即變數x的型別)的資料。

在C++中,對檔案的操作是通過stream的子類fstream(file stream)來實現的,所以,要用這種方式操作檔案,就必須加入標頭檔案fstream.h。下面就把此類的檔案操作過程一一道來。

開啟檔案:

imbue(locale("chs"));設定中文模式

void open(const char* filename,int mode,int access);

引數:

filename:  要開啟的檔名
mode:    要開啟檔案的方式
access:   開啟檔案的屬性 

開啟方式在類ios中定義,常用值如下:

ios::app:以追加的方式開啟檔案

ios::ate:  檔案開啟後定位到檔案尾,ios:app就包含有此屬性

ios::binary:  以二進位制方式開啟檔案,預設的方式是文字方式。兩種方式的區別見前文

ios::in:    檔案以輸入方式開啟
ios::out:   檔案以輸出方式開啟

os::nocreate: 不建立檔案,所以檔案不存在時開啟失敗 
ios::noreplace:不覆蓋檔案,所以開啟檔案時如果檔案存在失敗

ios::trunc:  如果檔案存在,把檔案長度設為0。

二、關閉檔案
  開啟的檔案使用完成後一定要關閉,fstream提供了成員函式close()來完成此操作,如:file1.close();就把file1相連的檔案關閉。

三、讀寫檔案
  讀寫檔案分為文字檔案和二進位制檔案的讀取,對於文字檔案的讀取比較簡單,用插入器和析取器就可以了;而對於二進位制的讀取就要複雜些,下要就詳細的介紹這兩種方式。

1、文字檔案的讀寫
  文字檔案的讀寫很簡單:用插入器(<<)向檔案輸出;用析取器(>>)從檔案輸入。假設file1是以輸入方式開啟,file2以輸出開啟。示例如下:

  file2<<"I Love You";//向檔案寫入字串"I Love You"
  int i;
  file1>>i;//從檔案輸入一個整數值。

  這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進位制等等,具體的格式有以下一些。

方案一:

#include<fstream.h>
void main()
{
  ifstream fin("d:\\簡介.txt",ios::nocreate);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  char c;
  while((c=fin.get())!=EOF)cout<<c;    //注意結束條件的判斷
  fin.close();
}

方案二:

讀入文字檔案:

//為能夠正確讀出寫入檔案的各資料,各資料間最好要有分隔
#include<fstream.h>
void main()
{
  fstream f("d:\\try.txt",ios::out);
  f<<1234<<' '<<3.14<<'A'<<"How are you"; //寫入資料
  f.close();
  f.open("d:\\try.txt",ios::in);
  int i;
  double d;
  char c;
  char s[20];
  f>>i>>d>>c;               //讀取資料
  f.getline(s,20);
  cout<<i<<endl;             //顯示各資料
  cout<<d<<endl;
  cout<<c<<endl;
  cout<<s<<endl;
  f.close();
}

方案三:

#include<fstream.h>
void main()
{
  ifstream fin("d:\\簡介.txt",ios::nocreate);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  char c[80];
  while(!fin.eof())            //判斷檔案是否讀結束
  {
    fin.read(c,80);
    cout.write(c,fin.gcount());
  }
  fin.close();
}

拷貝檔案

#include<fstream.h>
void main()
{
  ifstream fin("C:\\1.exe",ios::nocreate|ios::binary);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  ofstream fout("C:\\2.exe",ios::binary);
  char c[1024];
  while(!fin.eof())
  {
    fin.read(c,1024);
    fout.write(c,fin.gcount());
  }
  fin.close();
  fout.close();
  cout<<"Copy over!\n";
}

原文連結  https://blog.csdn.net/Rasin_Wu/article/details/79048094