c (十) 檔案件輸入輸出流(二)

2021-10-06 17:36:58 字數 4736 閱讀 8207

一、格式化輸出與i/o流函式

1、格式化輸出

//設定域寬控制符setw(n),所謂域寬即資料所佔的總字元數;

//要包含標頭檔案,setw()的預設為setw(0),按實際輸出;

//如果輸出的數值占用的寬度超過setw(int n)設定的寬度,則按實際寬度輸出;

#include #include int main()

output:

a//輸出的字元'a'前面有兩個空格,即輸出共3個字元數

0.12345//寬度超過setw(int n)設定的寬度,則按實際寬度輸出;

//設定浮點精度控制符:setprecision(int n)

//控制顯示浮點數的有效位,n代表數字總位數;

#include #include int main()

vs output:

2.42857

2.45857

22.4

//設定填充字元控制符:setfill(c)

//設定填充字元,即"<<"符號後面的資料長度小於域寬時,使用什麼字元進行填充;

#include #include int main()

output:

****a//輸出位寬總共5位,其中前四位用『*』填充;

在檔案操作中格式化輸入/輸出

控制符用途

setw(width)

設定輸出欄位的寬度(僅對其後的第乙個輸出有效)

setprecision(n)

設定浮點數的輸入/出精度(總有效數字個數等於n)

fixed

將浮點數以定點數形式輸入/出(其中小數點後有效數字個數等於setprecison指定的n)

showpoint

將浮點數以帶小數點和結尾0的形式輸入/出,即便改浮點數沒有小數部分

left

輸出內容左對齊

right

輸出內容右對齊

hexfloat/defaultfloat

c++11新增:前者以定點科學計數法的形式輸出十六進製制浮點數,後者還原預設浮點格式

get_money(money)

put_money(money)

c++11新增;從流中讀取貨幣值,或者將貨幣值輸出到流。支援不同語言和地區的貨幣格式。

get_time(tm,format)

put_time(tm,format)

c++11新增;從流中讀取日期時間值,或者將日期時間輸出到流。

2、用於輸入/輸出流的函式

>>運算子用空格分隔資料

//讀如下檔案內容:

//li lei#han meimei

#include int main()

vs output:

li//上述例子正說明『>>』碰到空格就返回;

讀上述檔案可以使用getline()函式;getline函式有以下兩種形式:

a、成員函式getline(char* buf, int size, char delimiter);

//member function

#include #include #include int main()

; constexpr int size;

std::arrayname{};

while(!ip.eof())

system("pause");

return 0;

}

b、非成員函式:std::getline(istream& is, string& str, char delimiter);

//non-member function

#include #include #include int main()

; std::string name2{};

while(!ip.eof())

system("pause");

return 0;

}

get()和put()讀寫單個字元;

get()有以下兩種形式:int istream::get()和istream& get(char& c)

//利用get()函式的兩種形式讀取字元;

#include #include int main()

; int n;

char c;

n = ip.get();//int istream::get();

ip.get(c);//istream& get(char& c);

std::cout << n << std::endl;

std::cout << c << std::endl;

return 0;

}

flush()可以將輸出流快取中的資料寫入目標檔案:ostream& flush();

同時std::cout << "hello" << std::flush()中的flush與endl類似。

二、二進位制輸入輸出

1、檔案的開啟模式(file open mode)

ofstream寫資料,ifstream讀資料,而fstream = ifstream + ofstream;當建立fstream物件時,應指定檔案開啟模式:

模式描述

ios::in

開啟檔案讀資料;

ios::out

開啟檔案寫資料;

ios::ate

開啟檔案,把檔案游標移到末尾。ate = at end

ios::trunc

若檔案存在則捨棄其內容,這是ios::out預設行為。trunc = truncate

ios::binary

開啟檔案以二進位制模式讀寫

一般在使用時都是幾種模式的組合

//開啟檔案,並追加資料;

#include #include int main()

2、二進位制輸入輸出簡介

文字檔案為一系列字元;二進位制檔案為一系列位元。

文字模式的讀寫是建立在二進位制模式讀寫的基礎上,只不過是將二進位制資訊進行了字元編譯碼。二進位制的讀寫無需資訊轉換。

檔案預設以文字模式開啟。

文字模式

二進位制模式

讀operator >>; get(); getline()

read()

寫operator <<; put();

write();

3、二進位制讀寫

二進位制讀寫函式原型:ostream& write(const char* s, std::streamsize count)

//

#include int main()

; char s = "beijing shanghai";

p.write(s, sizeof(s));

system("pause");

return 0;

}

如何將非字元資料寫入檔案呢?

首先要將資料轉換為位元組序列,即位元組流,再用write函式將位元組序列寫入檔案。

語法:reinterpret_cast(address)

//使用reinterpret_cast

#include #include int main()

; char* p = reinterpret_cast(&x);

int a[3];

char* p1 = reinterpret_cast(a);

std::string str;

char* p2 = reinterpret_cast(&str);

return 0;

}

二進位制檔案的讀操作用read()函式:istream& read(char* s, std::streamsize count);用法同write函式。

三、隨機訪問檔案

1、檔案位置指示器

檔案由位元組序列構成,檔案位置指示器是乙個特殊標記,它指向其中乙個位元組。讀寫操作都是從檔案位置指示器所標記的位置開始的。當開啟檔案,檔案位置指示器指向檔案頭,讀寫檔案時,檔案位置指示器會向後移動到下乙個資料項。

2、隨機訪問檔案

隨機訪問意味著可以讀寫檔案的任意位置。

讀檔案時用

寫檔案時用

獲知檔案定位器指到**

tellg();tell是獲知,g是get表示讀檔案

tellp();tell是獲知,p是put表示寫檔案

移動檔案定位器到指定位置

seekg();seek是尋找,g是get表示讀檔案

seekp();seek是尋找,p是put表示寫檔案

seek的用法

***_stream& seekg/seekp(pos_type pos);

***_stream& seekg/seekp(off_type off,std::ios_base::seekdir dir);

seekdir   檔案定位方向型別

解釋std::ios_base::beg

流的開始;beg = begin

std::ios_base::end

流的結尾

std::ios_base::cur

流位置指示器的當前位置;

eg:seekg(42l)將檔案位置指示器移動到檔案的第42位元組處;

seekg(10l, std::ios_base::beg)將檔案位置指示器移動到檔案開頭算起的第10位元組處。

檔案輸入輸出(二) 檔案的操作

file fopen char filename,char mode filename對應的實參是乙個字串,表示需要開啟的檔案的檔名 可以包括檔案的路徑 該實參可以是乙個字串常量,也可以是乙個字元指標 mode對應的實參也是乙個字串,對應了檔案的操作模式 r 以唯讀方式開啟乙個文字檔案,如果檔案不存...

2017 11 04 10檔案的輸入輸出,異常

檔案的輸入輸出,異常 1.檔案 2.異常 1.檔案的輸入輸出 1.開啟檔案open函式 open file option file是要開啟的檔案 option是可選擇的引數,常見有 mode等 2.檔案的開啟模式 r 制度模式,檔案不存在時會報錯 w 寫入模式,檔案存在會清空之前的內容,檔案不存在則...

python 16 檔案操作 輸入輸出

檔案操作分為三步 找到檔案 操作關閉按照編碼方式進行檔案的分類 使用方便 占用記憶體小 但是讀取速度慢 不允許跳躍讀取 二進位制檔案 把檔案儲存放在記憶體檔案中進行操作 分類 程式檔案 資料檔案 輸入檔案 輸出檔案文字檔案的操作 又叫ascci檔案 但是預設是編碼uncode編碼 開啟檔案 open...