C 檔案處理

2021-04-26 06:42:54 字數 2061 閱讀 4210

一、 檔案和流

每個檔案不是以檔案結束符結束,就是以在由系統維護和管理的資料結構中特定的位元組號處結束。檔案開啟時,就會建立乙個物件,將這個物件和某個流關聯起來。

cin,cout,cerr,clog這4個物件會自動生成。與這些物件相關聯的流提供程式與特定檔案或裝置之間的通訊通道。

二、 檔案處理包括標頭檔案

----------

三、 建立順序訪問檔案

檔案開啟方式一覽:

四、 讀取順序訪問檔案中的資料

例如:

ifstream類和ostream類都提供成員函式,使程式重新定位「檔案位置指標」,這些成員是ifstream類的seekg和ostream類的seekp,每個istream物件有乙個get指標,表示檔案中一下個輸入相同的位元組數,每個ostream物件有乙個put指標,表示下有乙個輸出相同的位元組數。

例:  inclientfile.seekg( 0 );將檔案位置指標移動到檔案開頭,seekg的引數通常為long型別的整數。seekg還有第2個引數,可以指定查詢方向,ios::beg(預設)相對於流的開頭定位,ios::cur相對於流的當前位置定位,ios::end相對於流結尾定位。檔案位置指標是個整數值,指定檔案中離檔案開頭的相對位置(偏移量)。

例如:

五、 更新順序訪問檔案

案例:原記錄: 300 white 0.00

改為  : 300 worthington 0.00

因為新記錄的長度大於原始記錄的長度,所以從『ton』中的『o』之後的字元將重定

為檔案中的下一條順序記錄,其原因在於:使用流插入操作符《和流讀取操作符》的格式化輸入/輸出模型中,域的寬度不定,所以記錄的寬度也不定。

例如:7.14  -117  2047   25482都是int型別的值,雖然他們的內部儲存佔相同的位元組數,但是將他們以格式化文字列印到螢幕上或儲存在磁碟上時站用的域不一樣。因此格式化輸出/輸入模型通常不用於更新現有的記錄。

六、 隨機訪問檔案

生成順序檔案和從順序訪問檔案搜尋特定資訊順序訪問檔案不適宜快速訪問應用程式,即立即找到特定記錄的資訊。快速應用程式是用隨機訪問檔案實現,這種檔案的各個記錄可以直接快速的訪問,而不需要進行搜尋。

隨機訪問檔案中的每條記錄有相同的長度,所以能夠用記錄關鍵字的函式計算出每條記錄相對於檔案起始點的位置 。

七、 建立隨機訪問檔案

ostream成員函式write把從記憶體中指定位置開始的固定個數的位元組輸出到指定流中。當流與檔案關聯時,資料被寫到put檔案位置指標所指的位置。istream成員函式read把固定數目的位元組從指定流輸入到記憶體中指定位址開始的區域中。如果流與檔案關聯,則該位元組從get檔案位置指標指定的檔案位址開始輸入。

例: 將乙個4位元組的整數number,不再用 outfile << number;

列印1位或11位(10位加乙個符號位,各自需要1位元組的儲存空間)改用

outfile.write( reinterpret_cast< const char * >( &number ), sizeof( number));

write函式要求乙個const char *型別的資料作為第乙個引數,因此我們用reinterpret_cast< const char * >強制型別轉換操作符將number的位址變為const char *指標。第二個引數是size_t型別的整數,指定寫入的位元組數。

隨機訪問檔案處理程式很少在檔案中只寫入乙個域,通常會一次寫如乙個struct或乙個

class物件。

例如:

八、 向隨機訪問檔案隨機寫入資料

ostream的函式seekp和write用於將資料儲存到檔案的指定位置。

outcredit.seekp( ( client.accountnumber – 1 ) * sizeof ( clientdata ));

將物件的「put」檔案位置指標放在( client.accountnumber – 1 ) * sizeof ( clientdata )求出的位元組位置處。

ofstream的物件outcredit用檔案開啟方式ios::ate開啟。「put」檔案位置指標最初在檔案末尾,但資料可以在檔案任何位置寫入。

九、 從隨機訪問檔案中順序讀取資料例:

例子:

C 檔案處理

寫了乙個遊戲資源編輯器 中間真是挫折不少,首先是c 到c 的轉變,主要是檔案處理上的不適應,c c 程式讀寫圖形檔案相當方便 主要是win 32 api本來就是為c c 提供的 c 讀寫起來就有點不太順,我總是想用win32 api中的結構體去讀取,那樣各類資料就自動填充好了,不過c 的塊讀取只能填...

C 檔案處理

c 把檔案視為無結構的位元組流,所以記錄等說法在c 檔案中是不存在的。1.建立順序訪問檔案 include include include using namespace std int main cout enter the account,name,and balance,n enter end...

C 檔案處理

這幾天在研究c 檔案處理方面的東西。綜述 c file i o 主要用到以下幾個類 1.ifstream 檔案讀 reading only 2.ofstream 檔案寫 writing only 3.fstream 讀寫均可。宣告以上類的變數即可對檔案操作。將乙個檔案與以上乙個類變數關聯即可。注意包...