(1)開啟文字檔
cpp 的檔案宣告與定義 在 fstream
因此必須 #include <fstream>
文字檔案物件有三種
    (A)ifstream 建立可供讀取資料的檔案物件
    (B)ofstream 建立可供寫入資料的檔案物件
    (C)fstream 建立可供讀寫資料的檔案物件

範例:
    #include <fstream> //引用 <fstream> 標頭檔
    fstream file;
    file.open("Readme.txt",ios::in); //以讀取模式開啟 Readme.txt 檔
    fstream 物件的 open
    函數中有兩個參數,一個是檔名,另一個是開啟檔案的模式參數,常用的模式參數如下:

(一)開檔參數說明

 模式參數

說明

 ios::in

檔案開啟為讀取狀態

 ios::out

檔案開啟為寫入狀態

 ios::ate

從檔案結尾讀取及寫入資料

 ios::app

將資料附加在檔案結尾

 ios::trunc

如果檔案存在,就清除檔案內的資料


(二)常用的檔案處理函數
 函數 說明
 open(file,mode) 以 mode 模式開啟名為 file 的檔案
 close() 關閉檔案
 is_open() 檢查檔案是否為開啟狀態,若是則傳回 true,否則傳回 flase
 eof() 判斷是否至檔案結尾
 write(buffer,n) 將 buffer 陣列中 n 個字元寫入至檔案中

(三)檔案寫入
常用的檔案讀取方式,如下:
write(buffer,n) 自目前位置至檔案結尾為止,讀取 n 個字元至 buffer 陣列
int putc(int char, FILE *stream) 寫入字元到指定的資料流。
int fputs(const char *str, FILE *stream) 將字串寫入資料流
int fprintf(FILE *stream, const char *format, ...) 從資料以指定格式輸出到資料流。

(四)檔案讀取
常用的檔案讀取方式,如下:
read(buffer,n) 自目前位置至檔案結尾為止,讀取 n 個字元至 buffer 陣列
int getc(FILE *stream)
從指定的資料流,讀取一個字元(unsigned char類型)。
char *fgets(char *str, int n, FILE *stream) 從資料流讀取字串。
int fscanf(FILE *stream, const char *format, ...) 從資料流讀取指定格式的資料。


  任何語言,再學習檔案讀寫的時候,檔案路徑是要優先搞懂的。
  以相對路徑方式,可以先以寫入的方式,建立一個檔案,先了解檔案內定路徑在哪裡。
  若以絕對路徑描述,就可以不用管那麼多了。

  範例:(讀取二維陣列)
  const int MAX=20;
  char filename[]="../Map.txt";
  char Map[MAX][MAX]={" "};
  int x,y,i;
  char ch=" ";
  std::string s="";
  std::fstream fp;
  fp.open(filename, std::ios::in);  //開啟檔案
  if(!fp){  //如果開啟檔案失敗,fp為0;成功,fp為非0
      std::cout<<"開檔失敗: "<<filename<<std::endl;
      system("pause");
      return(0);
  }
  x=0;
  while(ch!="\n")
  {
      fp.get(ch);  //get 函數可以得到控制碼字元
      Map[0][x++]=ch;
  }
  y=0;x--;//扣掉跳行碼,x 為第一行的字數
  while(!fp.eof())
  {
      y++;
      for(i=0;i<x;i++)
      {
          //fp>>Map[y][i]; 使用資料流運算子會失去某些字元, 例如空白讀不到
          fp.get(ch);//雖然可以讀到所有字元, 但是要過濾不需要字元也是困擾
          if(ch>=char(32)) //空白字元之ASCII碼是 32
              Map[y][i]=ch;
          else
              i--;
      }
  }
  fp.close();//關閉檔案   

範例:(朋友資料寫入檔案)