參考:http://www.weixueyuan.net/view/6412.html
總結:
文件類型:
計算機上的文件其實是數據的集合,對文件的讀寫歸根結底還是對數據的讀寫操作。文件可以大致分為兩種:文本文件和二進制文件。
文本文件它的每一個字節存放的是一個ASCII碼,代表一個字符。
二進制文件是將內存中的數據按照其在內存中的存儲形式原樣存放在磁盤上。
文本文件用記事本打開,顯示的是字符,如下面左圖,而用記事本打開一個二進制文件則顯示的是一堆亂碼。
文件的打開和關閉:
ifstream類和ofstream類中都有一個成員函數open,該函數可以用類的對象調用。open函數有兩個參數,第一個參數是需要打開的文件名,這個參數可以是字符指針、字符數組或string類型,第二個參數是輸入輸出格式。
類ifstream和類ofstream中的構造函數中已經包含了open函數的功能,因此我們為了方便,通常會在創建對象時就將參數列出,利用帶參數的構造函數打開文件。
打開文件后處理完數據需要關閉文件,我們直接用對象調用close()函數就可以了。
文件的讀寫操作:
對文本文件的讀寫操作有兩種方式:一種方式是使用輸入輸出操作符“<<”、“>>”;另一種方式是使用put、get、getline等函數進行操作。
第二種方式是使用函數,但是這些函數只是能用於處理字符,對於其它數據類型則有些有心無力了,為此還是建議使用第一種方式,因為第一種方式重載了輸入輸出操作符,它可以處理所有內建數據類型。
----------------------------------------
計算機上的文件其實是數據的集合,對文件的讀寫歸根結底還是對數據的讀寫操作。文件可以大致分為兩種:文本文件和二進制文件。
文本文件它的每一個字節存放的是一個ASCII碼,代表一個字符。二進制文件是將內存中的數據按照其在內存中的存儲形式原樣存放在磁盤上。文本文件用記事本打開,顯示的是字符,如下面左圖,而用記事本打開一個二進制文件則顯示的是一堆亂碼,如下面右圖所示。
例1:
#include <iostream> #include <fstream> using namespace std; int main() { int A[ 3 ][ 10 ]; int i, j; ifstream input( "input.txt", ios::in ); if( ! input ) { cerr << "Open input file error!" << endl; exit( -1 ); } ofstream output( "output.txt", ios::out ); if( ! output ) { cerr << "Open output file error!" << endl; exit( -1 ); } for( i = 0; i < 3; i++ ) { for( j = 0 ; j < 10; j++ ) { input >> A[ i ][ j ]; } } for( i = 0; i < 3; i++ ) { for( j = 0 ; j < 10; j++ ) { cout << A[ i ][ j ] <<" "; } cout << endl; } for( i = 0; i < 3; i++ ) { for( j = 0 ; j < 10; j++ ) { output << A[ i ][ j ] <<" "; } output << "\r\n"; } input.close(); output.close(); return 0; }
我們先通過例1來介紹文本文件的讀寫,先來看一下頭文件,因為我們在程序中使用了cout和cerr對象,因此必須要包含iostream頭文件,因為是文件操作故而還需要包含fstream頭文件。在主函數中我們先來看一下文件打開操作。ifstream類和ofstream類中都有一個成員函數open,該函數可以用類的對象調用。open函數有兩個參數,第一個參數是需要打開的文件名,這個參數可以是字符指針、字符數組或string類型,第二個參數是輸入輸出格式。下標中列出了一些輸入輸出格式。
| 格式 | 用途 |
|---|---|
| ios::in | 以輸入方式打開文件 |
| ios::out | 以輸出方式打開文件,如果文件不存在則新建,如果文件存在就將其原有內容全部清空 |
| ios::app | 輸出的數據追加到文件末尾 |
| ios::ate | 打開一個文件,並將指針定位到文件末尾 |
| ios::trunc | 打開一個文件,如果文件不存在則新建,如果存在,則清空原有文件中的內容 |
| ios::binary | 以二進制方式打開文件,如果不指定則默認采用文本方式打開文件 |
| ios::in | ios::out | 以輸出和輸入方式打開文件 |
| ios::in | ios::binary | 以輸入方式打開一個二進制文件 |
| ios::out| ios::binary | 以輸出方式打開一個二進制文件 |
open函數如果打開失敗則返回0,也即false,否則則為一個非零值。當然我們的類ifstream和類ofstream中的構造函數中已經包含了open函數的功能,因此我們為了方便,通常會在創建對象時就將參數列出,利用帶參數的構造函數打開文件。而本例中使用的就是這樣的一種方式,例如“ifstream input( "input.txt", ios::in ); ”,通常我們都會使用這種方式,因為這種方式方便。在程序中我們也檢測了文件是否打開成功,如果打開成功則對象創建成功,為一個非0值。打開文件后處理完數據需要關閉文件,我們直接用對象調用close()函數就可以了。
對文本文件的讀寫操作有兩種方式:一種方式是使用輸入輸出操作符“<<”、“>>”;另一種方式是使用put、get、getline等函數進行操作。第二種方式是使用函數,但是這些函數只是能用於處理字符,對於其它數據類型則有些有心無力了,為此還是建議使用第一種方式,因為第一種方式重載了輸入輸出操作符,它可以處理所有內建數據類型。在本例中也是使用第一種方式處理整型數據。從例1中我們也可以看到從文件輸入和輸出與標准輸入輸出使用方法其實是一樣的,只不過是將類對象由cout和cin換成了ofstream類和ifstream類的對象。在示例程序中我們先是從input.txt文件中讀取數據存入到數組A[3][10]中,然后再將A[3][10]數組中的數據打印到顯示器,之后再將數據寫入到output.txt文件中。
