【C++基礎】檔案流讀寫操作

蓁葉發表於2020-10-31

向文字檔案寫入資料

int arr[] = {1,2,3,4,5};
//定義檔案流物件
ofstream ofile;
//開啟檔案
ofile.open("test.txt", ios::out);
if(!ofile)
{
    cerr << "open file fail" << endl;
    exit(1);
}
//把內容寫入檔案
for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
{
    ofile << arr[i] << " ";
}
//關閉檔案流物件
ofile.close();

從文字檔案讀取資料

int arr[10];
ifstream ifile;
//開啟檔案
ifile.open("test.txt", ios::in);//相對其他檔案是in
if(!ifile)
{
    cerr << "open file fail" << endl;
    exit(1);
}
for(int i = 0; i < 10; i++)
{
    //站在檔案角度是讀檔案
    ifile >> arr[i];//把檔案的內容寫入到陣列中
}
ifile.close();

二進位制檔案寫操作

int arr[] = {1,2,3,4,5};
//1.定義檔案流物件
ofstream ofile;
//2.開啟檔案
ofile.open("test.txt", ios::out | ios :: binary);
if(!ofile)
{
    cerr << "open file fail" << endl;
    exit(1);
}
//3.檔案流物件寫操作
ofile.write((char*)arr,sizeof(arr));
//4.關閉檔案流物件
ofile.close();

二進位制檔案讀操作

int arr[10];
//1.定義檔案流物件
ifstream ifile;
//2.開啟檔案
ifile.open("test.txt", ios::in && ios::binary);//相對其他檔案是in
if(!ifile)
{
    cerr << "open file fail" << endl;
    exit(1);
}
//3.檔案流物件讀操作
file.read(char*)arr,sizeof(arr));
//4.關閉檔案流
ifile.close();

檔案的隨機讀取

//1.定義檔案流物件
ifstream ifile;
//2.開啟檔案
ifile.open("test.txt", ios::in);//相對其他檔案是in
if(!ifile)
{
    cerr << "open file fail" << endl;
    exit(1);
}
//3.檔案流物件讀操作
int pos;
int val;
while(1)
{
    cout << "請輸入位置 :>";
    cin >> pos;
    //seekg 對輸入檔案定位,有兩個引數:
    //第一個:表示偏移量,可正可負,正表示向後,負表示向前
    //第二個:beg檔案開頭,cur檔案指標當前位置,end檔案結尾
    ifile.seekg(pos,ios::beg);
    ifile >> val;//val讀取檔案
    cout << " val = " << val << endl;
}
//4.關閉檔案流
ifile.close();

格式化資料流

ofile << "成功率  = " << setiosflags(ios::fixed) << setprecision(2) 
<< num_success << "/"<< num_total << " = "
<<100.0*num_success/num_total <<  "%"  << endl;

setiosflags(ios::fixed)主要是將流的格式設定為:fixed(將一個浮點數表示為一個定點整數和小數點和小數部分的格式)。然後setprecision(2)表示小數部分的精度為2位

設定輸出域寬

include <iomanip>
setw和setfill 被稱為輸出控制符

setw(int n)用來控制輸出間隔
cout<<'s'<<setw(8)<<'a'<<endl;
//顯示效果:s        a //s與a之間有7個空格,加上a就8個位置
cout <<setw(2) <<a <<b;//語句中域寬設定僅對a有效,對b無效。

setw()預設填充的內容為空格,可以setfill()配合使用設定其他字元填充。
cout<<setfill('*')<<setw(5)<<'a'<<endl;
//顯示效果:****a //4個*和字元a共佔5個位置。

相關文章