c++ 檔案流
阿新 • • 發佈:2019-01-29
檔案操作:
FILE* buffer = fopen("filename",mode);
fopen_s() FILE* 檔名: "BusInfo.dat"
開啟方式:1.文字模式:
r 開啟只讀檔案,該檔案必須存在。
r+ 開啟可讀寫的檔案,該檔案必須存在。
rb+ 讀寫開啟一個二進位制檔案,只允許讀寫資料。
rt+ 讀寫開啟一個文字檔案,允許讀和寫。
w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案
w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。
a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該文
件,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(EOF符保留)
a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該 檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即文
件原先的內容會被保留。(原來的EOF符不保留)
wb 只寫開啟或新建一個二進位制檔案;只允許寫資料。
wb+ 讀寫開啟或建立一個二進位制檔案,允許讀和寫。
wt+ 讀寫開啟或著建立一個文字檔案;允許讀寫。
at+ 讀寫開啟一個文字檔案,允許讀或在文字末追加資料。
ab+ 讀寫開啟一個二進位制檔案,允許讀或在檔案末追加資料。
2.二進位制: "rb","wb","ab"格式與前面相同,只是使用二進位制模式而非文字模式開啟。
區別: 文字模式是作業系統在人和二進位制之間做了一層轉義。
回車符"\r\n" 解釋成"\n"(讀出時),將"\n"解釋成"\r\n"(寫入時)
二進位制模式:檔案本身的內容和你編寫程式時用函式讀到的內容完全相同。
簡單的檔案I/O
要讓程式寫入檔案,必須這樣做:
1.建立一個ofstream物件來管理輸出流
2.將該物件與特定的檔案關聯起來。
3.以使用cout的方式使用該物件,唯一的區別是輸出將進入檔案,而不是螢幕。
要完成包含標頭檔案fstream。對大多數(但不是全部)實現來說,包含該檔案使自動包括iostream。
ofstream fout;
接下來,必須將這個物件與特定的檔案關聯起來。為此,可以使用open()方法。例如,假設要開啟檔案jar.txt進行
輸出,則可以這樣做:
fout.open("jar.txt");
也可以使用另一個建構函式將這兩步(合併成一條語句):
ofstream fout("jar.txt");
fout << "Dull Data";
由於ostream是ofstream類的基類。因此可以使用所有的ostream方法,包括各種插入運算子定義,格式化方法和控制符。
ofstream類使用被緩衝的輸出,因此程式在建立像fout這樣的ofstrcam物件時,將為輸出緩衝區分配空間。
以這種方式開啟檔案來進行輸出時,如果沒有這樣的檔案,將建立一個新檔案;如果有這樣的檔案,則開啟檔案將清空檔案,輸出將進入到一個
空檔案中。
讀取檔案的要求與寫入檔案相似;
將該物件與特定的檔案關聯起來;
以使用cin的方式使用該物件。
ifstream fin;
fin.open("jellyjar.txt");
ifstream fis("jamjar.txt");
char ch;
fin >> ch;
char buf[80];
fin >> buf;
fin.getline(buf,80);
string line;
getline(fin,line);
當輸入和輸出流物件過期時,到檔案的連線將自動關閉。另外,也可以使用close()方法來顯示地關閉檔案。
fout.close();
fin.close();
關閉遮掩的連線並不會刪除流,而只是斷開流到檔案的連線。然而,流管理裝置仍被保留。
17.4.4 命令列處理技術
檔案處理程式通常使用命令列引數來指定檔案。命令列引數是使用者在輸入命令時,在命令列中輸入的引數。
例如,要在UNIX或Linux系統中計算檔案包含的字數,可以在命令列提示符下輸入下面的命令:
wc report1 report2 report3
其中 wc 是程式名,report1 report2 和report3是作為命令列引數傳遞給程式的檔名。
fgets(char* ,nLength,FILE*);
一次讀一行
引數1:自己的緩衝區
引數2:緩衝區大小
引數3:檔案的緩衝區
fread(char*,2,3,FILE*); 讀
fwrite(char*,2,3,FILE*); 寫
fclose(FILE*); 關閉檔案,沒寫的話,記憶體洩漏,內容沒寫進去
buffer = NULL 防止野指標, 使用前 if(NULL == buffer)
FILE* buffer = fopen("filename",mode);
fopen_s() FILE* 檔名: "BusInfo.dat"
開啟方式:1.文字模式:
r 開啟只讀檔案,該檔案必須存在。
r+ 開啟可讀寫的檔案,該檔案必須存在。
rb+ 讀寫開啟一個二進位制檔案,只允許讀寫資料。
rt+ 讀寫開啟一個文字檔案,允許讀和寫。
w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案
w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。
a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該文
件,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(EOF符保留)
a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該 檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即文
件原先的內容會被保留。(原來的EOF符不保留)
wb 只寫開啟或新建一個二進位制檔案;只允許寫資料。
wb+ 讀寫開啟或建立一個二進位制檔案,允許讀和寫。
wt+ 讀寫開啟或著建立一個文字檔案;允許讀寫。
at+ 讀寫開啟一個文字檔案,允許讀或在文字末追加資料。
ab+ 讀寫開啟一個二進位制檔案,允許讀或在檔案末追加資料。
2.二進位制: "rb","wb","ab"格式與前面相同,只是使用二進位制模式而非文字模式開啟。
區別: 文字模式是作業系統在人和二進位制之間做了一層轉義。
回車符"\r\n" 解釋成"\n"(讀出時),將"\n"解釋成"\r\n"(寫入時)
二進位制模式:檔案本身的內容和你編寫程式時用函式讀到的內容完全相同。
簡單的檔案I/O
要讓程式寫入檔案,必須這樣做:
1.建立一個ofstream物件來管理輸出流
2.將該物件與特定的檔案關聯起來。
3.以使用cout的方式使用該物件,唯一的區別是輸出將進入檔案,而不是螢幕。
要完成包含標頭檔案fstream。對大多數(但不是全部)實現來說,包含該檔案使自動包括iostream。
ofstream fout;
接下來,必須將這個物件與特定的檔案關聯起來。為此,可以使用open()方法。例如,假設要開啟檔案jar.txt進行
輸出,則可以這樣做:
fout.open("jar.txt");
也可以使用另一個建構函式將這兩步(合併成一條語句):
ofstream fout("jar.txt");
fout << "Dull Data";
由於ostream是ofstream類的基類。因此可以使用所有的ostream方法,包括各種插入運算子定義,格式化方法和控制符。
ofstream類使用被緩衝的輸出,因此程式在建立像fout這樣的ofstrcam物件時,將為輸出緩衝區分配空間。
以這種方式開啟檔案來進行輸出時,如果沒有這樣的檔案,將建立一個新檔案;如果有這樣的檔案,則開啟檔案將清空檔案,輸出將進入到一個
空檔案中。
讀取檔案的要求與寫入檔案相似;
將該物件與特定的檔案關聯起來;
以使用cin的方式使用該物件。
ifstream fin;
fin.open("jellyjar.txt");
ifstream fis("jamjar.txt");
char ch;
fin >> ch;
char buf[80];
fin >> buf;
fin.getline(buf,80);
string line;
getline(fin,line);
當輸入和輸出流物件過期時,到檔案的連線將自動關閉。另外,也可以使用close()方法來顯示地關閉檔案。
fout.close();
fin.close();
關閉遮掩的連線並不會刪除流,而只是斷開流到檔案的連線。然而,流管理裝置仍被保留。
17.4.4 命令列處理技術
檔案處理程式通常使用命令列引數來指定檔案。命令列引數是使用者在輸入命令時,在命令列中輸入的引數。
例如,要在UNIX或Linux系統中計算檔案包含的字數,可以在命令列提示符下輸入下面的命令:
wc report1 report2 report3
其中 wc 是程式名,report1 report2 和report3是作為命令列引數傳遞給程式的檔名。
#include <fstream> #include <iostream> #include <string> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { string filename; cout << "Enter name for new file: "; cin >> filename; ofstream fout(filename.c_str()); fout << "For your eyes only!\n"; cout << "Enter your secret number: "; float secret; cin >> secret; fout << "Your secret number is " << secret <<endl; fout.close(); ifstream fin(filename.c_str()); cout << "Here are the ontents of " << filename << ":\n"; char ch; while(fin.get(ch)) cout << ch; cout << "Done \n"; fin.close(); return 0; return 0; }
fgets(char* ,nLength,FILE*);
一次讀一行
引數1:自己的緩衝區
引數2:緩衝區大小
引數3:檔案的緩衝區
fread(char*,2,3,FILE*); 讀
fwrite(char*,2,3,FILE*); 寫
fclose(FILE*); 關閉檔案,沒寫的話,記憶體洩漏,內容沒寫進去
buffer = NULL 防止野指標, 使用前 if(NULL == buffer)