在C++程式開發中,也會有很多檔案上傳、檔案寫入等業務需要針對檔案操作進行開發,檔案處理也是任何應用的重要組成部分。 C++ 有幾種建立、讀取、更新和刪除檔案的方法。 本主題介紹用於操作 C++ 檔案的常用函式方法。
注意:上述屬性可以用“or”連線,例如,ios::out|ios::binary
。檔案的開啟模式標記表示檔案的使用方式,這些標記可以單獨使用,也可以組合使用。
1)ofstream:寫入操作,輸出檔案類。
2)ifstream:讀取操作,輸入檔案類。
3)fstream:可以同時讀寫的檔案類。
1)檔案開啟功能
ofstream
ifstream
fstream
雙open
會員功能:
void open(const char* szfilename, int mode)
szfilename
引數是指向檔名的指標mode
引數是檔案的開啟模式標記。
例如
#include2)檔案關閉功能叫#include
using namespace std;
int main()
ifstream infile;
infile.open("c:\\tmp\\test.txt", ios::in);
如果 (infile) 為 true,則檔案開啟成功。
infile.close();
elsecout <
ofile.open("test1.txt", ios::out);
if (!ofile) true,則檔案開啟不正確。
cout <
ofile.open("tmp\\test2.txt", ios::out | ios::in);
如果 (ofile) 為 true,則檔案開啟成功。
ofile.close();
elsecout <
iofile.open("..\test3.txt", ios::out | ios::in | ios::trunc);
if (!iofile)
cout <
return 0;
open()
開啟檔案的方法是在檔案流物件和檔案之間建立關聯的過程。 叫close()
方法關閉開啟的檔案,檔案流被銷毀,將來可用於關聯其他檔案。
語法:void close( )。
例如
#include3) ofstream::is_openusing namespace std;
int main()
const char *url="www.cj**apy.com";
ofstream outfile("site.txt", ios::out);
到 URLtxt 檔案。
outfile.write(url, 30);
關閉已開啟的檔案。
outfile.close();
return 0;
bool is_open()
:檔案開啟時返回 true,否則返回 false
C++ 輸入檔案流ifstream
遺產:
ios_base
1)istream::get()
istream&get(char&c):從cin
輸出字元,例如cin.get(c)
istream& get (char* s, streamsize n): 從cin
或istream
,最大字串長度為n
,最後乙個字元是字串結尾字元。
例如
char c[20];istream& get (char* s, streamsize n, char delim):cin.get(c,20);
delim
是分隔字元,預設值應為
(換行符),如果人為定義,則可以任意定義,例如,cin.get(c,20,'a');當遇到字元時,只有 A 字元之前的字串部分輸出到 C 字串中,此時 A 字元不是從 Cin 輸入緩衝區中提取的,而是從後面的變數中提取的,GetLine 直接丟棄該字元;istream& ignore (streamsize n = 1, int delim = eof): discarded 更多
n
字元,或遇到dlim
直到。
2)istream::getline
istream& getline (char* s, streamsize n):將一行讀入字元陣列。 違約delim
是換行符,遇到後丟棄,從第二次讀取
delim
開始閱讀後。
istream& getline (char* s, streamsize n, char delim ): 定義你自己的塞子delim
3)std::getline (string)
使用者定義的截斷字元。從流物件中讀取一行儲存到字串 str 中,直到遇到截斷字元,如果遇到截斷字元,則將其從流中取出然後丟棄(不儲存,下一次操作的起點在它之後)函式呼叫之前 str 的內容將被覆蓋。istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);C++11 標準。
截斷字元為預設值''
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);C++11 標準。
例如
#include4)istream::readIStream& Read (char* s, streamsize n):從輸入流中提取 n 個字元並將它們儲存在陣列中#include
#include
using namespace std;
int main()
string str;
ifstream ifs("test.txt");
if(!ifs)
while( getline(ifs,str))
return 0;
s
,則未檢測到內容,並且未應用字串結束符號
例如
#include // std::cout5)istream::putbackiStream & Putback (char c):從輸入流中讀取乙個字元並返回它。#include // std::ifstream
int main ()
return 0;
例如
char c = std::cin.get();6)istream::ungetistream & unget():類似地將最後乙個讀取字元返回到輸入流std::cin.putback (c);
putback()
例如
char c = std::cin.get();5.檔案寫入功能方法C++ 輸出檔案流std::cin.unget();
ofstream
遺產:
ios_base
1)std::ostream::operator<<
用法和cout <<
同樣,將資料寫入檔案最方便的函式,過載常用的資料型別。
arithmetic types (1)
ostream& operator<< bool val);
ostream& operator<< short val);
ostream& operator<< unsigned short val);
ostream& operator<< int val);
ostream& operator<< unsigned int val);
ostream& operator<< long val);
ostream& operator<< unsigned long val);
ostream& operator<< long long val);
ostream& operator<< unsigned long long val);
ostream& operator<< float val);
ostream& operator<< double val);
ostream& operator<< long double val);
ostream& operator<< void* val);
stream buffers (2)
ostream& operator<< streambuf* sb );
manipulators (3)
ostream& operator<< ostream& (pf)(ostream&))
ostream& operator<< ios& (pf)(ios&))
ostream& operator<< ios_base& (pf)(ios_base&))
2)ostream::put
ostream & put (char c):插入字元c
進入溪流。
3)ostream::write
ostream& write (const char* s, streamsize n): 從陣列s
中等n
字元入到流中。
例如
#include1)istream::ignoreistream& ignore (Streamsize n = 1, int delim = eof):從輸入流中讀取#include
using namespace std;
int main()
2.讀出txt
ifstream in("out.txt");
char buffer[200];
if(in.is_open())
return 0;
n
字元並丟棄或讀取delim
然後字元停止閱讀。
2)istream::peek
int peek():返回輸入流中的下乙個字元,並將其保留在輸入流中作為下一次讀取的起點。 返回值為整數 ASCLL 碼值,可以使用char(c)
轉換為字元。
3)istream::tellg
streampos tellg():讀取輸入流中文指標的位置,返回值可以轉換為int
例如
is.seekg (0, is.end);4)istream::seekgistream&seekg (streampos pos),istream&seekg (streamoff off, ios base::seekdir way): 引數int length = is.tellg();
is.seekg (0, is.beg)
pos
是流中可以轉換為的絕對位置int
引數off
是偏移量,其中way
相關,型別為int
引數way
您可以選擇下表中的任何常量。
5)ios::rdstate
iostate rdstate():返回當前流中的內部錯誤狀態iostate
二進位數,需要按位算術才能獲得相應位置的值。 可以使用此功能的功能:good()
eof()
fail()
bad()
更換。
例如
#include這就是這次的全部內容#include
#include
using namespace std;
int main ()
elseprint_state(ifs);
return 0;