c++ file operation (reference 5)
生活随笔
收集整理的這篇文章主要介紹了
c++ file operation (reference 5)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
二進(jìn)制文件的處理
雖然有規(guī)則格式(formatted)的文本(到目前為止我所討論的所有文件形式)非常有用,但有時(shí)候你需要用到無(wú)格式(unformatted)的文件——二進(jìn)制文件。它們和你的可執(zhí)行程序看起來(lái)一樣,而與使用<<及>>操作符創(chuàng)建的文件則大不相同。get()函數(shù)與put()函數(shù)則賦予你讀/寫(xiě)無(wú)規(guī)則格式文件的能力:要讀取一個(gè)字節(jié),你可以使用get()函數(shù);要寫(xiě)入一個(gè)字節(jié),則使用put()函數(shù)。你應(yīng)當(dāng)回想起get()——我曾經(jīng)使用過(guò)它。你可能會(huì)疑惑為什么當(dāng)時(shí)我們使用它時(shí),輸出到屏幕的文件內(nèi)容看起來(lái)是文本格式的?嗯,我猜這是因?yàn)槲掖饲笆褂昧?lt;<及>>操作符。
譯注:作者的所謂“規(guī)則格式文本(formatted text)”即我們平時(shí)所說(shuō)的文本格式,而與之相對(duì)的“無(wú)格式文件(unformatted files)”即以存儲(chǔ)各類數(shù)據(jù)或可執(zhí)行代碼的非文本格式文件。通常后者需要讀入內(nèi)存,在二進(jìn)制層次進(jìn)行解析,而前者則可以直接由預(yù)定好的<<及>>操作符進(jìn)行讀入/寫(xiě)出(當(dāng)然,對(duì)后者也可以通過(guò)恰當(dāng)?shù)刂剌d<<及>>操作符實(shí)現(xiàn)同樣的功能,但這已經(jīng)不是本系列的討論范圍了)。
get()函數(shù)與都各帶一個(gè)參數(shù):一個(gè)char型變量(譯注:指get()函數(shù))或一個(gè)字符(譯注:指put()函數(shù),當(dāng)然此字符也可以以char型變量提供)。
假如你要讀/寫(xiě)一整塊的數(shù)據(jù),那么你可以使用read()和write()函數(shù)。它們的原型如下:
istream &read(char *buf, streamsize num);
ostream &write(const char *buf, streamsize num);
對(duì)于read()函數(shù),buf應(yīng)當(dāng)是一個(gè)字符數(shù)組,由文件讀出的數(shù)據(jù)將被保存在這兒。對(duì)于write()函數(shù),buf是一個(gè)字符數(shù)組,它用以存放你要寫(xiě)入文件的數(shù)據(jù)。對(duì)于這兩個(gè)函數(shù),num是一個(gè)數(shù)字,它指定你要從文件中讀取/寫(xiě)入的字節(jié)數(shù)。
假如在讀取數(shù)據(jù)時(shí),在你讀取“num”個(gè)字節(jié)之前就已經(jīng)到達(dá)了文件的末尾,那么你可以通過(guò)調(diào)用gcount()函數(shù)來(lái)了解實(shí)際所讀出的字節(jié)數(shù)。此函數(shù)會(huì)返回最后一次進(jìn)行的對(duì)無(wú)格式文件的讀入操作所實(shí)際讀取的字節(jié)數(shù)。
在給出示例代碼之前,我要補(bǔ)充的是,如果你要以二進(jìn)制方式對(duì)文件進(jìn)行讀/寫(xiě),那么你應(yīng)當(dāng)將ios::binary作為打開(kāi)模式加入到文件打開(kāi)的參數(shù)表中。
現(xiàn)在就讓我向你展示示例代碼,你會(huì)看到它是如何運(yùn)作的。
示例1:使用get( )和put( )
#include <fstream.h>
void main()
{
??fstream File("test_file.txt",ios::out | ios::in | ios::binary);
??char ch;
??ch='o';
??File.put(ch); // 將ch的內(nèi)容寫(xiě)入文件
??File.seekg(ios::beg); // 定位至文件首部
??File.get(ch); // 讀出一個(gè)字符
??cout << ch << endl; // 將其顯示在屏幕上
??File.close();
}
示例2:使用read( )和write( )
#include <fstream.h>
#include <string.h>
void main()
{
??fstream File("test_file.txt",ios::out | ios::in | ios::binary);
??char arr[13];
??strcpy(arr,"Hello World!"); //將Hello World!存入數(shù)組
??File.write(arr,5); // 將前5個(gè)字符——"Hello"寫(xiě)入文件
??File.seekg(ios::beg); // 定位至文件首部
??static char read_array[10]; // 在此我將打算讀出些數(shù)據(jù)
??File.read(read_array,3); // 讀出前三個(gè)字符——"Hel"
??cout << read_array << endl; // 將它們輸出??
??File.close();
}
雖然有規(guī)則格式(formatted)的文本(到目前為止我所討論的所有文件形式)非常有用,但有時(shí)候你需要用到無(wú)格式(unformatted)的文件——二進(jìn)制文件。它們和你的可執(zhí)行程序看起來(lái)一樣,而與使用<<及>>操作符創(chuàng)建的文件則大不相同。get()函數(shù)與put()函數(shù)則賦予你讀/寫(xiě)無(wú)規(guī)則格式文件的能力:要讀取一個(gè)字節(jié),你可以使用get()函數(shù);要寫(xiě)入一個(gè)字節(jié),則使用put()函數(shù)。你應(yīng)當(dāng)回想起get()——我曾經(jīng)使用過(guò)它。你可能會(huì)疑惑為什么當(dāng)時(shí)我們使用它時(shí),輸出到屏幕的文件內(nèi)容看起來(lái)是文本格式的?嗯,我猜這是因?yàn)槲掖饲笆褂昧?lt;<及>>操作符。
譯注:作者的所謂“規(guī)則格式文本(formatted text)”即我們平時(shí)所說(shuō)的文本格式,而與之相對(duì)的“無(wú)格式文件(unformatted files)”即以存儲(chǔ)各類數(shù)據(jù)或可執(zhí)行代碼的非文本格式文件。通常后者需要讀入內(nèi)存,在二進(jìn)制層次進(jìn)行解析,而前者則可以直接由預(yù)定好的<<及>>操作符進(jìn)行讀入/寫(xiě)出(當(dāng)然,對(duì)后者也可以通過(guò)恰當(dāng)?shù)刂剌d<<及>>操作符實(shí)現(xiàn)同樣的功能,但這已經(jīng)不是本系列的討論范圍了)。
get()函數(shù)與都各帶一個(gè)參數(shù):一個(gè)char型變量(譯注:指get()函數(shù))或一個(gè)字符(譯注:指put()函數(shù),當(dāng)然此字符也可以以char型變量提供)。
假如你要讀/寫(xiě)一整塊的數(shù)據(jù),那么你可以使用read()和write()函數(shù)。它們的原型如下:
istream &read(char *buf, streamsize num);
ostream &write(const char *buf, streamsize num);
對(duì)于read()函數(shù),buf應(yīng)當(dāng)是一個(gè)字符數(shù)組,由文件讀出的數(shù)據(jù)將被保存在這兒。對(duì)于write()函數(shù),buf是一個(gè)字符數(shù)組,它用以存放你要寫(xiě)入文件的數(shù)據(jù)。對(duì)于這兩個(gè)函數(shù),num是一個(gè)數(shù)字,它指定你要從文件中讀取/寫(xiě)入的字節(jié)數(shù)。
假如在讀取數(shù)據(jù)時(shí),在你讀取“num”個(gè)字節(jié)之前就已經(jīng)到達(dá)了文件的末尾,那么你可以通過(guò)調(diào)用gcount()函數(shù)來(lái)了解實(shí)際所讀出的字節(jié)數(shù)。此函數(shù)會(huì)返回最后一次進(jìn)行的對(duì)無(wú)格式文件的讀入操作所實(shí)際讀取的字節(jié)數(shù)。
在給出示例代碼之前,我要補(bǔ)充的是,如果你要以二進(jìn)制方式對(duì)文件進(jìn)行讀/寫(xiě),那么你應(yīng)當(dāng)將ios::binary作為打開(kāi)模式加入到文件打開(kāi)的參數(shù)表中。
現(xiàn)在就讓我向你展示示例代碼,你會(huì)看到它是如何運(yùn)作的。
示例1:使用get( )和put( )
#include <fstream.h>
void main()
{
??fstream File("test_file.txt",ios::out | ios::in | ios::binary);
??char ch;
??ch='o';
??File.put(ch); // 將ch的內(nèi)容寫(xiě)入文件
??File.seekg(ios::beg); // 定位至文件首部
??File.get(ch); // 讀出一個(gè)字符
??cout << ch << endl; // 將其顯示在屏幕上
??File.close();
}
示例2:使用read( )和write( )
#include <fstream.h>
#include <string.h>
void main()
{
??fstream File("test_file.txt",ios::out | ios::in | ios::binary);
??char arr[13];
??strcpy(arr,"Hello World!"); //將Hello World!存入數(shù)組
??File.write(arr,5); // 將前5個(gè)字符——"Hello"寫(xiě)入文件
??File.seekg(ios::beg); // 定位至文件首部
??static char read_array[10]; // 在此我將打算讀出些數(shù)據(jù)
??File.read(read_array,3); // 讀出前三個(gè)字符——"Hel"
??cout << read_array << endl; // 將它們輸出??
??File.close();
}
轉(zhuǎn)載于:https://www.cnblogs.com/liushmh/archive/2005/04/08/133865.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的c++ file operation (reference 5)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 奇怪的证书服务
- 下一篇: s3c2440移植MQTT