一、簡單的檔案輸入和輸出
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
//讓程式寫入檔案
//1、建立ofstream 對象
//2、将該對象與對應的檔案關聯
//3、輸出到檔案
//4、關閉檔案
string filename;
cin>>filename;
//c_str() 傳回一個指向字元串的指針
//如果filename是c字元串格式,可以直接傳參數
ofstream fout(filename.c_str());
fout<<"This is c ++ io test !\n";
fout.close();
//讓程式從檔案讀取資料
//1、建立一個ifstream對象管理輸入流
//2、将該對象與對應的檔案綁定
//3、以使用cin的方式,(注意:是方式,不是cin),使用該檔案
//4、關閉檔案
ifstream fin(filename.c_str());
cout<<"Here are the content of "<<filename<<":\n";
char ch;
while(fin.get(ch))//從檔案讀取字元
cout<<ch;//輸出到螢幕
fin.close();
return 0;
}
二、狀态檢查和is_opne()
較新的c++提供了 檢查檔案是否被打開的方法 is_open(),可以檢查出是否以不合适的檔案模式打開失敗
三、打開多個檔案
1、如果需要同時打開多個檔案,則必須為每一個檔案建立一個流。
2、如果需要同時打開一組檔案,可以隻打開一個流。首先建立ifstream對象,然後使用open()方法将流與這個檔案關聯起來
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc,char**argv)
{
ifstream fin;
char ch;
int total = 0;
for(int i = 0; i<argc; i++)
{
fin.open(argv[i]);
if(!fin.is_open())
{
cerr<<"can't open the file"<<argv[i]<<endl;
fin.clear();
continue;
}
int temp = 0;
while(fin.get(ch))
{
temp++;
}
cout<<total<<" characters in files "<<argv[i]<<endl;
total += temp;
fin.clear();
fin.close();
}
cout<<"Total characters of the file are "<<total<<endl;
return 0;
}
四、檔案模式
檔案模式描述的是檔案将被如何使用:讀、寫、追加等。
在使用流與檔案關聯時,還是open函數,都可以指定檔案模式的第二個參數
ios_base類定義了openmode類型,用于表示模式
常量 | 含義 |
ios_base::in | 打開檔案,便于讀取 |
ios_base::out | 打開檔案,以便寫入 |
ios_base::ate | 打開檔案,并移到檔案尾 |
ios_base::app | 追加到檔案尾 |
ios_base::trunc | 如果檔案存在,則截短檔案,即把檔案内容長度截短為0,相當于删除檔案已有的内容 |
ios_base::binary | 二進制檔案 |
五、追加檔案,即在一個檔案的末尾追加資料
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
void AddToFile(string filename)
{
//首先顯示已有内容
char ch;
ifstream fin;
fin.open(filename);
if(fin.is_open())
{
while(fin.get(ch))
cout<<ch;
fin.close();
}
//然後追加文檔
ofstream fout(filename,ios::out | ios::app);
if(!fout.is_open())
{
cout<<"Can't open file !"<<endl;
exit(EXIT_FAILURE);
}
string content;
while(getline(cin,content) && content.size()>0)
{
fout<<content<<endl;
}
fout.close();
}
int main()
{
const char* filename = "test.txt";
AddToFile(filename);
return 0;
}
六、什麼是二進制檔案,什麼是文本檔案
- 文本檔案格式是指将所有的内容甚至是數字都存儲為文本
- 二進制格式指的是存儲值的計算機内部表示。也就是說,計算機不是存儲字元,而是存儲這個值的64位double表示
- 對于字元來說,二進制表示與文本表示是一樣的,即都是字元的ASCII碼的二進制表示,對于數字來說,二進制表示與文本表示有很大的差别
七、兩種模式的對比
- 文本模式便于讀取
- 二進制檔案對于數字來說比較精确,因為它存儲的是值的内部表示,是以不會有轉換誤差和舍入誤差
- 二進制格式儲存資料的速度更快,并可以大塊的存儲資料,占用的空間也比較小
- 不同平台的二進制存儲方式有所不同,即有可能在一個系統上的二進制檔案在另一個平台上打不開
八、使用二進制存儲資料時,可以使用成員函數 write