概述 文件是在計算機內存中以二進制表示的數據在外部存儲介質上的另一種存放形式。它可以使得數據以長期保存。 C++把每個文件都看成是一個有序的字節序列,每個文件都以文件結束標志結束。 文件通常分為二進制文件和文本文件。文本文件可以用文本編輯器打開查看便於閱讀,讀寫時需要進行格式轉換;二進制文件用文本編輯器打開時看到的是亂碼,不便於閱讀;讀寫時不需要格式轉換,效率高。 文本文件:是由字符序列組成,它的每個字節以ASCII碼形式存放一個字符,又稱ASCII碼文件。Eg:數字3.141按5個字符序列’3’,’’.,’1’,’4’,’1’存儲,占5個字節。 二進制文件:是按數據在內存中的存儲原樣格式存到磁盤文件中的。Eg:數字3.141存儲成二進制文件時占4個字節。二進制文件輸入輸出時不進行數據格式轉換。一般是可執行程序,圖形,圖像,聲音,視頻等文件。 處理和操作文件 讀文件(輸入):從磁盤文件讀取數據到內存 寫文件(輸出):將內存數據輸出到磁盤文件 類ofstream 用於向文件寫數據 類ifstream 用於從文件中讀數據 類fstream 用於向文件寫或從文件讀數據 這些類都定義在頭文件<fstream>中 文件打開方式 打開方式 說明 ios::in 打開文件進行讀操作(ifstream默認模式) ios::out 打開文件進行寫操作(ofstream默認模式) ios::ate 打開一個已有輸入或輸出文件並查找到文件尾 ios::app 打開文件以便在文件的尾部添加數據 ios::nocreate 如果文件不存在,則打開操作失敗 ios::trunc 如文件存在,清除文件原有內容(默認) ios::binary 以二進制方式打開 實例 文件操作步驟 對於文件操作要做一下事情 打開文件用於讀和寫 檢查打開是否成功 讀或寫 檢查是否讀完 使用完文件後要關閉文件 [cpp] #include <iostream> #include <conio.h> #include <fstream> #include <iostream> using namespace std; //向文件中寫數據 void test1() { ofstream fout;//創建ofstream對象 //當打開一個寫文件時,缺省方式是創建一個新文件。1.當打開的文件已存在,文件原有內容被覆蓋(只要打開原來的內容就被清空) 2.當打開一個舊文件,不覆蓋原有內容,打算接著在後面寫,可用打開方式選項app(append) 3.使用多個打開模式,中間用運算符"|"分割 eg:fout.open("score.txt",ios::out|iost::app); //從VC++運行,是project所在目錄 //運行exe文件,是exe文件所在的目錄 fout.open("score.txt",ios::out);//打開文件。//相當文件路徑 //寫兩行 fout<<"Jim"<<" "<<822<<endl; fout<<"Eric"<<" "<<422<<endl; fout.close();//關閉文件。1.確保信息被保存 2.釋放文件以便其他程序使用 } //從文件中讀取數據 #include <Windows.h> void test2() { ifstream fin; //創建ifstream變量 fin.open("score.txt",ios::in);//打開文件 if (fin.fail())//或if(!fin) //檢查文件是否准備准備好 { cout<<"Unable to open input file\n"; //exit(1);//退出程序 } //開始從文件讀取數據 char name[80]; int score; // fin>>name>>score; //其文件的必須是字符、空格和數字 組成 // cout<<name<<" "<<score<<endl; // fin>>name>>score; // cout<<name<<" "<<score<<endl; //檢測文件尾 //如果你不知道文件共有多少行,而又想讀整個文件,如何知道什麼時候到達文件尾? //可以調用成員函數eof()來檢查是否到文件尾。如果達到文件尾,eof()返回true。 int total=0,avg=0,temp=0,num=0; fin>>name>>temp; while(!fin.eof()) { num++; total+=temp; fin>>name>>temp; } if (num>0) { cout<<"total:"<<total<<" avg:"<<total/num<<endl; } fin.close(); } void test(char t) { std::cout<<"press key====="<<t<<std::endl; switch (t) { case '1':test1();break; case '2':test2();break; case 27: www.2cto.com case 'q':exit(0);break; default: std::cout<<"default "<<t<<std::endl;break; } } int main() { while(1) { test(getch()); } return 0; }