精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++中隨機(jī)存取文件的處理

開發(fā) 后端
在本文中,我們所講的是怎樣使用C++中的隨機(jī)存取文件。除了最簡單的應(yīng)用程序以外,大多數(shù)程序都需要讀寫文件?;蛟S只是為了讀取一個配置文件,一個文本解析器或更為復(fù)雜的什么東西。

和許多的C++程序一樣,有些人更喜歡用原先的C語言方式處理問題,如果你恰好也是這些人中的一員,就應(yīng)該學(xué)習(xí)一下這篇文章。

基本的文件操作有

◆fopen——打開文件,指定文件以怎樣的方式打開(讀/寫)以及類型(二進(jìn)制/文本)

◆fclose——關(guān)閉已經(jīng)打開的文件

◆fread——讀取文件

◆fwrite——寫文件

◆fseek/fsetpos——將文件指示器轉(zhuǎn)移到文件中的某一地方

◆ftell/fgetpos——可以告訴你文件指示器所在的位置

文件有兩種基本類型:文本和二進(jìn)制。在這兩者之中,通常二進(jìn)制類型是較容易解決的。由于在文本中處理隨機(jī)存取并不常用,我們會在本文中重點(diǎn)關(guān)注二進(jìn)制文件的處理。上面列出的操作中的前四項(xiàng)可用于文本文件和隨機(jī)存取文件。后面的兩項(xiàng)則僅用于隨機(jī)存取。

隨機(jī)存取意味著我們可以在文件的任意部分之間進(jìn)行切換,且可以從中讀寫數(shù)據(jù)而不需要通讀整篇文件。

二進(jìn)制文件

二進(jìn)制文件是任意長度的文件,它保存有從0到0xff(0到255)不等的字節(jié)值。這些字節(jié)在二進(jìn)制文件中沒有任何意義,與此不同的是,在文本文件中,值為13就意味著回車,10意味著換行,26意味著文件結(jié)束,而讀取文本文件的軟件要能夠解決這些問題。

在現(xiàn)在的術(shù)語中,我們將二進(jìn)制文件稱為包含了字節(jié)的字符流,大多數(shù)語言傾向于將其理解為字符流而不是文件。重要的部分是數(shù)據(jù)流本身而不是其來源。在C語言中,你能從文件或數(shù)據(jù)流方面來考慮數(shù)據(jù)?;蛘?,你可以將其理解為一組長的數(shù)組。通過隨機(jī)存取,你可以讀寫數(shù)組的任意部分。

      例一:
// ex1.c : Defines the entry point for the console application.

//

#include < stdio.h>

#include < string.h>

#include < windows.h>

int FileSuccess(FILE * handle,const char * reason, const char * path) {

OutputDebugString( reason );

OutputDebugString( path );

OutputDebugString(" Result : ");

if (handle==0)

{

OutputDebugString("Failed");

return 0;

}

else

{

OutputDebugString("Suceeded");

return 1;

}

}

int main(int argc, char * argv[])

{

const char * filename="test.txt";

const char * mytext="Once upon a time there were three bears.";

int byteswritten=0;

FILE * ft= fopen(filename, "wb");

if (FileSuccess(ft,"Opening File: ", filename)) {

fwrite(mytext,sizeof(char),strlen(mytext), ft);

fclose( ft );

}

printf("len of mytext = %i ",strlen(mytext));

return 0;

}
 

這段代碼顯示了一個簡單的打開待寫的二進(jìn)制文件,文本字符(char*)會寫入該文件。通常你會使用文本文件但是筆者想證明你可以向二進(jìn)制文件寫入文本。

     // ex1.c

     #include < stdio.h>

     #include < string.h>

     int main(int argc, char * argv[])

    {

     const char * filename="test.txt";

     const char * mytext="Once upon a time there were three bears.";

     int byteswritten=0;

     FILE * ft= fopen(filename, "wb") ;

     if (ft) {

     fwrite(mytext,sizeof(char),strlen(mytext), ft) ;

     fclose( ft ) ;

     }

      printf("len of mytext = %i ",strlen(mytext)) ;

     return 0;

     }
 

例一的作用

這個例子打開了一個待寫的二進(jìn)制文件。FILE*變量從fopen()調(diào)用中返回。如果這一操作失敗那么它會返回為0。

Fopen()命令試圖打開指定的文件,在這個案例中則是位于相同文件夾的test.txt。記住,如果文件包含一個路徑那么所有的退格必須重疊?!癱:\folder\test.txt”是錯誤的,你必須使用“c:\\folder\\test.txt”。

由于文件樣式是wb,我們正準(zhǔn)備寫入二進(jìn)制文件。如果文件不存在則系統(tǒng)會創(chuàng)建一個文件,如果存在,則里面的內(nèi)容都會被刪除。如果調(diào)用fopen失敗了,或許由于文件被打開了,或者其名稱包括無效字符又或者一個無效路徑那么fopen會返回0值。

雖然你可以只檢查ft是否為0(值為0則成功),但是筆者還是添加了一個FileSuccess()函數(shù)來確保這一操作。在窗口中,它會顯示調(diào)用是否成功以及文件名稱。如果你失敗了則可能需要修復(fù)。注意在Windows中一般沒有多少輸出文本可供系統(tǒng)調(diào)試器使用,

 fwrite(mytext,sizeof(char),strlen(mytext), ft) ; fwrite()調(diào)用輸出了指定文本。第二,三個參數(shù)分別是字符的大小和字符串的長度。它們兩個都是被size_t定義了。注意有了二進(jìn)制文件后,即便你正在向文件中寫入(char*)字符串,它也沒有任何附加換行字符。如果你想要這些字符,你必須明確將這些字符包含到字符串中。

讀寫文件

打開一個文件的時候,必須指定打開的方式。這意味著如果你打算要為文件附加?xùn)|西,那么是否要創(chuàng)建新文件并對其進(jìn)行覆蓋?它是文本文件還是二進(jìn)制文件呢?是要讀取文件還是要寫文件呢?這樣要通過使用一個或更多的文件模式分類符來完成,文件模式分類符是一些單獨(dú)的字母“r”,“b”,“w”,“a”和+?!皉”意思是打開文件以便讀取。如果文件不存在或找不到文件這一操作會失敗。“w”意思是待寫方式或空文件方式打開文件。如果文件存在,則文件內(nèi)容會被損壞?!癮”表示打開文件,并準(zhǔn)備從文件末端寫入而不需要在寫入新數(shù)據(jù)前刪除EOF標(biāo)記;如果不存在該文件則首先會創(chuàng)建一個文件。向文件模型添加+會創(chuàng)建下列三種新模型:

“r+”打開文件等待讀取或?qū)懭??!皐+”以空文件方式打開文件等待讀取或?qū)懭?。如果文件存在,則文件內(nèi)容會被損毀。

“a+”打開文件等待讀取或添加,添加的操作包括新數(shù)據(jù)寫入前EOF標(biāo)記的移除,以及寫入完成后EOF標(biāo)記的保存,如果文件不存在則先要創(chuàng)建文件。

下面的列表顯示了字碼組合包括文本的和二進(jìn)制文件的。通常你可以選擇從文本文件中讀取或?qū)懭胛募遣灰獌烧咄瑫r使用。

就二進(jìn)制文件而言,你可以選擇對相同文件進(jìn)行讀取和寫入的操作。列表告訴了我們可以用字碼進(jìn)行哪些操作。

       Mode Type of file Read Write Create Truncate 
r text Read

rb+ binary Read

r+ text Read Write

r+b binary Read Write

rb+ binary Read Write

w text Write Create Truncate

wb binary Write Create Truncate

w+ text Read Write Create Truncate

w+b binary Read Write Create Truncate

wb+ binary Read Write Create Truncate

a text Write Create

ab binary Write Create

a+ text Read Write Create

a+b binary Write Create

ab+ binary Write Create
 

就筆者的經(jīng)驗(yàn)來看,除非你剛剛創(chuàng)建完文件或讀取完文件,否則你通過使用“w+b”只能僥幸成功。

還有一些情況允許其他字母存在。例如微軟運(yùn)行“t”代表文本模式,“c”用于認(rèn)可,“n”用于非認(rèn)可,“S”為順序存取優(yōu)化緩沖,“R”代表隨機(jī)存取,“T”代表臨時性而“D”用于 刪除/臨時性保存。

使用二進(jìn)制文件的主要原因是可以獲得靈活性;你可以讀取或?qū)懭胛募娜我獠糠?。文本文件只能讓你按照順序讀取或?qū)懭搿,F(xiàn)在隨著SQLite或MySQL數(shù)據(jù)庫的普及,在二進(jìn)制文件中使用隨機(jī)存取的需要減少了。從某種意義上說,隨機(jī)存取文件記錄有點(diǎn)老土了,但是仍然還是有用的。

筆者在數(shù)據(jù)庫普及之前就使用過基于隨機(jī)存取文件的多種數(shù)據(jù)處理方案。例如,在小文件中,筆者使用的是 索引/數(shù)據(jù) 文件模式。該模式包括兩個文件。一個是數(shù)據(jù)文件,它保存了一些長短不一的記錄。另一種文件是索引文件,這樣的文件擁有同樣的記錄作為數(shù)據(jù)文件。但是在索引文件中每個記錄的長度相同而且都由兩個適合結(jié)構(gòu)的部分組成。

struct {??fpos_t pos;??int size; } indexrec; 

類型fpos_t是由fsetpos()和fgetpos()定義和使用的執(zhí)行。這些是fseek和ftell更新的版本且更有助于創(chuàng)建書簽。如果你正在計(jì)算文件聞之且需要設(shè)定文件那么你應(yīng)該使用fseek(),另外ftell()也可以給你int的當(dāng)前位置。

在實(shí)際操作中,fpos_t可能只是一個int但是你應(yīng)該使用fpos_t類型。它保存了當(dāng)前文件指示器的副本。這是隨機(jī)存取文件的屬性,它表明了下一次讀取或?qū)懭氲奈恢?。它的粒度為一,因此你可以將其放在文件的任意位置?/P>

【編輯推薦】

  1. C++、Java與C#的命名規(guī)范總結(jié)
  2. 在C++中使用Lambda函數(shù)提高代碼性能
  3. 給C++初學(xué)者的50條建議
責(zé)任編輯:彭凡 來源: IT專家網(wǎng)
相關(guān)推薦

2009-12-16 10:41:37

Ruby隨機(jī)存取文件

2010-05-05 10:20:43

Java

2010-01-27 16:05:06

C++堆棧

2010-01-21 09:34:57

C++語法

2023-12-04 09:37:00

C++靜態(tài)變量

2010-01-21 14:07:14

CC++聲明

2018-01-29 08:44:14

2010-01-28 16:31:54

C++類型

2010-01-25 10:25:19

C++變量

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2010-01-21 13:33:44

C++基類

2020-08-21 13:20:36

C++If ElseLinux

2010-01-20 10:19:55

C++數(shù)組

2019-01-04 10:41:07

系統(tǒng)內(nèi)存SRAM

2010-01-26 10:42:26

C++函數(shù)

2024-01-25 11:32:21

2011-04-11 11:09:50

this指針

2015-12-28 11:25:51

C++異常處理機(jī)制

2024-05-31 12:50:49

C++編程NaN

2010-01-26 14:35:11

C++關(guān)鍵字
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

日韩欧美在线网站| 国产精品久久久久久久久免费丝袜| 欧美激情国产日韩精品一区18| www男人天堂| 不卡av影片| 亚洲欧洲精品一区二区三区不卡| 7777精品伊久久久大香线蕉语言| 国产精品99精品| 精品国产精品久久一区免费式| 欧美福利视频一区| 国产午夜福利在线播放| 9色在线观看| 国产999精品久久| 国产乱码精品一区二区三| 色婷婷久久一区二区三区麻豆| 午夜精品一区二区在线观看的| 国产女18毛片多18精品| 亚洲自啪免费| 欧美裸体xxxx极品少妇| 人妻体内射精一区二区| 久久久久久久久成人| 富二代精品短视频| 成人在线观看毛片| 成人三级黄色免费网站| 处破女av一区二区| 国产男人精品视频| 成人毛片在线播放| 黄色日韩在线| 久久亚洲欧美日韩精品专区| 三级电影在线看| 视频在线亚洲| 欧美一区二区三区在线看| 成人观看免费完整观看| 男女羞羞视频在线观看| 国产精品国产三级国产普通话蜜臀 | 国内精彩免费自拍视频在线观看网址| 国产精品久久久久久亚洲伦| 鲁片一区二区三区| 欧美一级片免费| 国产精品一区二区在线播放| 国产精品欧美在线| 在线观看污污网站| 国产欧美日本| 538国产精品一区二区免费视频| 我要看黄色一级片| 国产国产精品| 色yeye香蕉凹凸一区二区av| a天堂中文字幕| 伊人精品一区| 亚洲人成免费电影| 亚洲一区二区乱码| 天堂资源在线亚洲| 日韩av在线免费| 国产又粗又猛又色| 久久久免费毛片| 亚洲国产精品久久久久久| 日本成人在线免费观看| 精品美女一区| 欧美日韩一区视频| 少妇网站在线观看| 精品亚洲a∨| 欧美日韩国产123区| 亚洲欧美日韩一级| 欧美日韩伦理一区二区| 欧美日本一区二区在线观看| 欧美美女性视频| 欧美一级做a| 制服丝袜亚洲播放| 丰满人妻一区二区三区53视频| 国产999精品在线观看| 欧美一级在线观看| 欧美图片自拍偷拍| 免费观看成人www动漫视频| 亚洲精品国精品久久99热| 北岛玲一区二区| 国内黄色精品| 久久久999成人| 国产一级在线观看视频| 亚洲每日在线| 国产福利视频一区二区| 一区二区国产欧美| 国产精品亚洲专一区二区三区 | 婷婷亚洲一区二区三区| 99久久免费国产| 日本不卡二区高清三区| 婷婷五月在线视频| 一区二区三区四区蜜桃| 青青青国产在线观看| 日本电影欧美片| 欧美日韩国产精品成人| 性活交片大全免费看| 国产成人精品一区二区免费看京 | 波多野结衣视频一区二区| 精品久久久久久| 免费看污黄网站| 欧美视频二区欧美影视| 日韩精品视频免费| 91狠狠综合久久久| 亚洲国产日韩欧美一区二区三区| 日韩av手机在线| 国产免费av电影| 久久嫩草精品久久久久| 日韩第一页在线观看| sm在线观看| 欧美视频你懂的| 97人妻精品一区二区三区免费| 精品免费av| 欧美精品激情在线| 中文字幕+乱码+中文乱码www| 国产精品系列在线播放| 欧美日韩一区二| 肉肉视频在线观看| 欧美伊人久久久久久久久影院| 成年人网站av| 欧州一区二区| 97在线视频免费| 国产精品一区二区黑人巨大| 久久综合久久综合久久综合| 日韩不卡一二区| 国产亚洲一区二区手机在线观看 | 亚洲午夜精品久久| 大黄网站在线观看| 欧美日韩在线播放三区四区| 精品国产av色一区二区深夜久久| 99免费精品| 国产成人亚洲综合青青| 少妇一级淫片免费看| 日韩毛片高清在线播放| 亚洲性生活网站| 欧美一级全黄| 97高清免费视频| 国产黄色高清视频| 中文字幕在线不卡视频| 看欧美ab黄色大片视频免费| 日韩有码一区| 久久久久免费精品国产| av中文字幕播放| 中文字幕一区二区在线播放| 97公开免费视频| 青青视频一区二区| 久久久久免费精品国产| 99视频免费看| 亚洲欧美激情视频在线观看一区二区三区| 欧美aⅴ在线观看| 视频小说一区二区| 国自产精品手机在线观看视频| a天堂在线视频| 亚洲你懂的在线视频| 99中文字幕在线| 在线电影一区二区| 亚洲综合国产精品| 粗大黑人巨茎大战欧美成人| 欧美精品 日韩| 你懂得在线观看| 精品一区二区免费看| 亚欧精品在线| 欧洲亚洲精品久久久久| 伊人久久精品视频| 欧美三级网站在线观看| 国产精品视频一二三| 最新中文字幕免费视频| 91欧美在线| 亚洲一区二区自拍| 男男gaygays亚洲| 亚洲а∨天堂久久精品喷水| 日本少妇做爰全过程毛片| av成人老司机| 欧美日韩第二页| 日韩精品一卡| 亚洲a∨日韩av高清在线观看| 中文国产字幕在线观看| 精品美女一区二区| 久久艹免费视频| 国产三级欧美三级日产三级99| 亚洲精品一二三四五区| 亚洲电影影音先锋| 国产福利久久| 欧美成人黑人| 久久精品一本久久99精品| www久久久com| 日韩欧美在线一区| 一级免费黄色录像| fc2成人免费人成在线观看播放| 波多野结衣家庭教师视频| 久久在线视频免费观看| 国产成人免费观看| 澳门av一区二区三区| 色偷偷噜噜噜亚洲男人| 亚洲大尺度网站| 一本到高清视频免费精品| 久久久99999| 成人h版在线观看| wwww.国产| 亚洲网址在线| 日韩欧美电影一区二区| 欧美国产亚洲精品| 日韩av免费看| aaa大片在线观看| 亚洲欧美日韩图片| www.久久色| 欧美日韩中文国产| 日韩成人高清视频| 国产精品国产三级国产普通话蜜臀 | 久久天天躁日日躁| 亚洲人妻一区二区三区| 在线成人免费视频| 国产一级免费视频| 一区二区成人在线| 免费看黄色三级| www.视频一区| 想看黄色一级片| 三级久久三级久久| av在线播放天堂| 91综合视频| 欧美日韩精品久久久免费观看| 无码国模国产在线观看| 国产精品免费久久久久久| 成人ssswww在线播放| 久久这里只有精品99| 第三区美女视频在线| 亚洲精品久久久久中文字幕二区 | 范冰冰一级做a爰片久久毛片| 久久九九全国免费精品观看| 爱久久·www| 亚洲视频在线看| 天堂在线中文| 亚洲精品动漫100p| 天天操天天操天天干| 精品国产电影一区二区| 成人av手机在线| 91精品国产麻豆| 国产精品一区二区黑人巨大| 欧美日韩中文一区| 免费一级a毛片| 日本道在线观看一区二区| 九一国产在线观看| 精品久久久中文| 日韩av一二三区| 精品久久久久久中文字幕一区奶水| 国产系列精品av| 亚洲一二三四久久| 国产精品suv一区二区69| 亚洲一区二区四区蜜桃| 国产一级免费观看| 亚洲成a人在线观看| 国产第一页在线播放| 亚洲综合一区二区精品导航| 久久午夜无码鲁丝片| 亚洲一二三区视频在线观看| 国产精品第一页在线观看| 亚洲一级不卡视频| 天堂中文在线网| 色综合久久中文综合久久97| 波多野结衣不卡| 欧美在线观看一区| 国产一区二区三区中文字幕 | 国产高清精品软件丝瓜软件| 91精品国产一区二区三区| 久久久久久在线观看| 色综合色狠狠综合色| 一级片中文字幕| 在线亚洲高清视频| 欧美a视频在线观看| 激情成人在线视频| 亚洲GV成人无码久久精品| 天天色图综合网| 欧美日韩一级在线观看| 精品久久久久人成| 日韩在线视频不卡| 欧美性猛交xxx| 中文字幕乱码视频| 欧美精品视频www在线观看| 波多野结衣视频观看| 欧美精品丝袜中出| www日本视频| 国产视频精品va久久久久久| 国内精品一区视频| 中文字幕日韩在线视频| 国产区美女在线| 欧美中文字幕视频| 日韩精品第二页| 成人欧美视频在线| 欧美三级电影在线| 中文字幕在线中文字幕日亚韩一区| 91精品国产视频| 2018日日夜夜| 石原莉奈在线亚洲三区| 中日韩av在线播放| 成人动漫中文字幕| 久久久免费看片| 亚洲精品乱码久久久久久久久 | 91日韩欧美| 波多野结衣综合网| 可以看av的网站久久看| 在线一区二区不卡| 91免费国产视频网站| 国产乱子轮xxx农村| 一区二区在线免费| 亚洲欧美一二三区| 日韩三级在线观看| 亚洲经典一区二区| 中文字幕在线观看日韩| 欧美大片黄色| 国产在线视频不卡| 91蜜桃臀久久一区二区| 免费一区二区三区| 欧美日韩亚洲三区| 韩国视频一区二区三区| 国产成人丝袜美腿| 天堂av免费在线| 精品欧美aⅴ在线网站| 亚洲无码久久久久久久| 国产视频精品xxxx| 丝袜美女在线观看| 日韩av免费在线看| 亚洲系列另类av| 99re99热| 久久精品999| 国产在线观看无码免费视频| 亚洲精品国产视频| 国产一区二区自拍视频| 日韩电影中文 亚洲精品乱码| 在线观看免费黄视频| 1769国内精品视频在线播放| aa亚洲一区一区三区| 性欧美.com| 亚洲专区免费| 国产情侣久久久久aⅴ免费| 1024国产精品| 中文字幕久久熟女蜜桃| 在线免费看av不卡| 成人亚洲欧美| 国产一区二区三区四区五区加勒比 | 免费在线性爱视频| 久久久中精品2020中文| 国产午夜久久av| 亚洲精品在线观看免费| 久久亚洲电影| 亚洲码无人客一区二区三区| 午夜a成v人精品| 日本毛片在线观看| 欧美伦理91i| 日本精品国产| 激情六月天婷婷| 国产精品原创巨作av| 日本午夜精品视频| 欧美精品乱码久久久久久| 成人在线观看一区| 国产精品永久免费视频| re久久精品视频| 国产精品久久久久9999小说| 国产欧美va欧美不卡在线| 日日夜夜狠狠操| 伊人久久五月天| 韩国三级一区| 欧美日韩中文国产一区发布| 日韩精品三区四区| 久久久久久国产免费a片| 欧美日韩一区三区| 午夜视频成人| 91精品入口蜜桃| 午夜国产精品视频| 无码国产精品久久一区免费| 亚洲电影激情视频网站| 日本精品一二区| 国产精品第8页| 91日韩免费| 黄色a级三级三级三级| 亚洲高清视频的网址| 天堂成人在线观看| 国产精品久久久久久久天堂| 欧美熟乱15p| 中文字幕天天干| 一区二区三区四区不卡在线| 欧美在线精品一区二区三区| 日本乱人伦a精品| 日韩精品久久| www.黄色网| 精品久久久久久中文字幕一区奶水 | 石原莉奈在线亚洲三区| 成人在线观看免费完整| 日韩精品一区二区三区中文不卡| 手机在线观看av网站| 欧美日韩在线精品一区二区三区| 麻豆精品久久久| 国产无套粉嫩白浆内谢| 国产婷婷成人久久av免费高清| 日韩一区中文| 欧日韩免费视频| 中文子幕无线码一区tr| 99久久精品国产色欲| 91精品国产免费久久久久久| 日本一区二区高清不卡| 特黄特色免费视频| 欧美三级日韩在线| 伦理av在线| 欧美日韩另类综合| 国产在线观看一区二区| 免费观看一区二区三区毛片| 操91在线视频|