主要針對於機試中的IO讀寫問題,c語言實現和使用太過於繁瑣,所以以后遇到類似題目還是用C++的;
主要包含頭文件
#include<iostream> #include<fstream> #include<sstream>
一般來說,用fstream就足夠夠用了,他包含了istream和ostream的有點,可以直接對一個流同時進行讀寫;
fstream的創建和初始化如下所示:
fstream fin; fin.open("C:\\Users\\Reality\\Desktop\\iotest\\testcpp.txt", ios::in);
注意一下,win系統下所有的格式采用“//”來對路徑分隔符就行轉義,最好使用絕對路徑,方便;
使用open(path,ios::)進行初始化,第一個參數使打開文件的完整路徑,第二個參數則是打開文件的詳細方式;
具體的ios::打開類型如下所示:
簡便來說:
fstream讀取用ios::in,輸出用ios::out,如果在已有文件后進行輸出則用ios::app。但是一定一定要注意,這些是針對於文本文件;
當針對於二進制文件的時候,打開文件則使用ios::binary。
這里再補充一下二進制文件和文本文件的問題:
兩個在內存中的表現形式和在外存上的存儲形式不一樣。
盡管文件都是01二進制流構成的,但是二進制文件使可以執行的機器文件,內容就是二進制數字;
而文本文件則還需要進行ASCII碼翻譯過程,才能翻譯成完整的文本文件。cpp/txt/html都是文本類型文件,如果使用IOS::binary進行二進制打開,則必讀取失敗。注意.o和.cpp文件的區別;
當使用fin.open后,最好進行是否打開文件成功的判斷。
if (!fin) { cout << "Open Failure" << endl; return 0; }
直接對fin進行判斷即可,當然也可以使用!fin.good()進行判斷;
在讀取和寫入文件時,和cin、cout輸入輸出流類似,直接輸入輸出;
值得注意的是讀入操作:
和cin的讀入操作類似,當cin>>s時,s的類型也可以為字符串也可以為數值類型,且都是空格或者換行結尾;
當想讀入整行字符串的時候,用getline(fin,s)即可,后續就是字符串的相關處理,又是老生常談的問題;
還有,一定要記住在使用完文件進行關閉操作;
fin.close();
來進行文件的關閉,以免出錯或者打開文件再次有問題;