C 檔案輸入和輸出

2021-09-08 15:01:38 字數 4844 閱讀 4120

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 檔案流 檔案流是以外存檔案為輸入輸出物件的資料流。輸出檔案流是從記憶體流向外存檔案的資料,輸入檔案流是從外存檔案流向記憶體的資料。每乙個檔案流都有乙個記憶體緩衝區與之對應。請區分檔案流與檔案的概念。...