C++的文件讀寫我經常使用的有兩種方式
1.基於C語言的文件讀寫函數
fread()和fwrite()
例子程序:
把一個txt文本中的內容讀入 一個std::string 中
char *file_name = "file.txt";
char buf[ 1024 ] = "";
string source;
FILE * fin ;
if(fopen_s(&fin , file_name , "r"))
{
cout << "找不到" << file_name << endl;
}
while(true)
{
unsigned int size = fread(buf , 1 , 1024 , fin);
if(1024 > size )
{
buf[size] = '\0';
source.append(buf , 0 , 1024 );
break;
}
source.append(buf , 0 , 1024);
}
fclose(fin);
寫入文件與讀取文件類似
fopen_s(&fout , file_name , "a+");
fwrite(buf , 1 , 1024 , fout);
這裏需要注意的是,使用r方式打開文件,可能不能夠讀取到整個文件,這對於存儲運行期間數據程序來說就不行了,這個時候可以使用rb方式
fopen_s(&fin , file_name , "rb"))//讀
fopen_s(&fout , file_name , "ab+");//寫
另外,對於文件的操作 fseek 、 ftell這兩個函數,其中fseek可以講讀取的遊標指定到某個位置,ftell可以得到當前遊標的位置。詳見msdn
http://msdn.microsoft.com/en-us/library/75yw9bf3(vs.71).aspx
http://msdn.microsoft.com/en-us/library/0ys3hc0b(v=vs.71).aspx
2.基於C++的流讀取方式
這就需要用到C++標準庫 fstream了
其他簡單的讀取寫入就不多介紹了,這個庫好用的地方在於可以讀取結構化的數據
如一個文本文件input.txt存儲了以下
張三 19 男 河北石家莊
李四 20 男 河南鄭州
小紅 19 女 廣東廣州
則可以用ifstream直接讀取,如下
ifstream fin("input.txt");
char line[64] = {0};
string name;
string age;
string sex;
string home;
while(fin.getline(line , sizeof(line)))
{
stringstream ss(line);
ss >> name;
ss >> age;
ss >> sex;
ss >> home;
cout << name << " " << age << " " << sex << " " <<< home << endl;
}
fin.close();