1.引入標頭檔案fstream
fstream標頭檔案定義了用於檔案輸入的類ifstream和檔案輸出的類ofstream
2.寫檔案
1)建立乙個ofstream物件來管理輸出流
2)將該物件與檔案關聯起來
3)使用cout方式使用該物件,唯一區別是輸出將進入檔案,而不是螢幕。
4)關閉到檔案的連線
示例如下:
ofstream fout;fout.open(
"test.txt");
fout
<<"
write something";
fout.close();
建立物件和關聯檔案可使用建構函式合併到一步,以上**等價於:
ofstream fout("test.txt");
fout
<<"
write something";
fout.close();
3.讀檔案
1)建立乙個ifstream物件來管理輸入流
2)將該物件與檔案關聯起來
3)使用ifstream的方法讀檔案
4)關閉到檔案的連線
示例如下:
ifstream fin("test.txt");
char
ch;fin>>ch;//
從檔案中讀取乙個字元
char buf[80
];fin>>buf;//
從檔案中讀取乙個單詞
fin.getline(buf,80);//
從檔案中讀取一行
string
line;
getline(fin,line);
//讀取一行轉換成字串
fin.close();
4.讀寫緩衝區
fstream流管理物件在使用cout或cin方式,讀或寫時,是通過緩衝區和檔案進行互動的,
而不是逐字節讀取或寫入檔案的。
關於close()函式,當流物件過期(如程式終止)時,到檔案的連線自動關閉,
也可使用cose()顯示關閉該連線。連線關閉後,將重新整理緩衝區。
與檔案的連線關閉後,並不會刪除流,fstream流物件和它管理的緩衝區仍然存在,
可以將流重新連線到檔案。
5.乙個簡單的讀寫檔案示例
#include#include#include
using
namespace
std;
const
string filename="
test.txt";
intmain()
cout
<<"
輸入密碼:";
float
secret;
cin>>secret;
fout
fout.close();
ifstream fin(filename.c_str());
if(!fin.is_open())
cout
<<"
輸入的密碼為:\n";
char
ch;while(fin.get
(ch))
cout
return0;
}
程式中is_open()函式,是用來檢查檔案是否被開啟
流物件的狀態包括:
一切順利,已達到檔案尾,i/o操作失敗等。如果一切順利,流狀態設定為0,否則設定為1。
6.開啟多個檔案
1)需要同時開啟多個檔案,則需要為每個檔案建立乙個流。
2)需要依次開啟一組檔案,可以只開啟乙個流,將它依次關聯到各個檔案。
如下例所示:
ifstream fin;fin.open(
"test.txt");
fin.close();
fin.clear();
fin.open(
"test2.txt");
fin.close();
7.檔案模式
常量含義
ios_base::in
開啟檔案,以便讀取
ios_base::out
開啟檔案,以便寫入
ios_base::ate
追加到檔案尾
ios_base::trunc
如果檔案存在,則清空檔案內容
ios_base::binary
二進位制檔案
對於ifstream open(),預設的模式為ios_base::in
對於ofstream open(),預設的模式為ios_base::out|ios_base::trunc,開啟並清空檔案
8.二進位制模式 ios_base::binary
檔案的儲存型別有兩種,文字格式或二進位制格式。
文字格式便於讀取,而二進位制格式更加精確,占用空間小,讀取速度快。
寫操作:
fout.write((char*)&t,sizeof t);
讀操作:
fin.read((char*)&t,sizeof t);
注意需要將型別例項位址,強制轉換為char*型別。
9.隨機訪問
隨機訪問是指,讀寫指標直接移動到檔案的任何位置。
跳轉函式:
istream & seekg(streamoff,ios_base::seekdir);//相對位址
istream & seekg(streampos);//
絕對位址
第乙個方法的意思是,離seekdir引數指定檔案位置,距離streamoff的位置。
其中,streamoff單位的是位元組,seekdir表示檔案的三個位置(頂端ios_base::beg,底端ios_base::end,當前位置ios_base::cur)
第二個方法的意思是,離檔案開頭streampos的位置
streampos表示檔案中的絕對位置,單位是位元組
seekg()
移到檔案開頭
tellg()
返回讀寫指標當前的位置
下面,我們用二進位制檔案模式,寫乙個簡單的隨機訪問示例:
#include#include#include
const
int lim=20
;struct
planet
;const
char *file = "
planets.dat";
inline
void eatline()
intmain()
if(finout.eof())
finout.clear();
else
}else
cout
<<"
enter record number to change:";
long
rec;
cin>>rec;
eatline();
if(rec<0||rec>=ct)
streampos place = rec*sizeof
pl; finout.seekg(place);
if(finout.fail())
finout.read((
char *)&pl,sizeof
pl);
cout
<<"
找到的 index number
"
<":"
<20)<":"
<0)<12)<<2)<6)if(finout.eof())
finout.clear();
cout
<<"
輸入name:";
cin.
get(pl.name,lim);
eatline();
cout
<<"
population:";
cin>>pl.population;
cout
<<"g:"
; cin>>pl.g;
finout.seekp(place);
finout.write((
char*)&pl,sizeof pl)
ct = 0
; finout.seekg(0);
cout
<<"
contents of file
"while(finout.read((char *)&pl,sizeof
pl))
finout.close();
cout
<<"
done.\n";
return0;
}
程式中,我們使用了乙個特別的流管理物件fstream,
fstream繼承子iostream,而iostream繼承自istream和ostream
因此fstream繼承了兩個緩衝區,乙個用於輸入,乙個用於輸出
並能同步化兩個緩衝區的處理。即輸入指標和輸出指標的位置始終相同。
這樣用乙個流管理物件,就可以同時進行讀和寫。
c 檔案輸入和輸出
c 檔案輸入和輸出 一 快速入門例子 include include using namespace std intmain return0 int main myfile.close else cout unable to open file n return0 二 開啟檔案的方式 開啟檔案 op...
C 檔案的輸入和輸出
fstream標頭檔案定義了三種支援檔案io的型別 1 ifstream,提供讀檔案功能 2 ofstream,提供寫檔案功能 3 fstream,提供讀寫同一檔案的功能 fstream除了繼承自iostream的行為外,還定義了自己的倆個新操作 open和close,以及形參為要開啟檔名的建構函式...
C 檔案輸出輸入
此篇文章只是簡要介紹c 中檔案輸入輸出的基本步驟,詳細情況請看附加的鏈結 1.檔案流和檔案流物件 1 檔案流 檔案流是以外存檔案為輸入輸出物件的資料流。輸出檔案流是從記憶體流向外存檔案的資料,輸入檔案流是從外存檔案流向記憶體的資料。每乙個檔案流都有乙個記憶體緩衝區與之對應。請區分檔案流與檔案的概念。...