來源:http://www.cplusplus.com/reference/cstdio/fopen/
定義: FILE * fopen ( const char * filename, const char * mode );
簡介:
打開在參數file name中指定其名稱的文件,並將其與一個流相關聯,該流可以在以后的操作中由返回的文件指針標識。
流上允許的操作以及如何執行這些操作由mode參數定義。
如果已知返回的流不引用交互設備,則默認情況下會對其進行完全緩沖(請參閱setbuf)。
返回的指針可以通過調用fclose或freopen與文件解除關聯。所有打開的文件在正常程序終止時自動關閉。
運行環境至少支持同時打開fopen_max文件。
參數:
filename
包含要打開的文件名的C字符串。
其值應遵循運行環境的文件名規范,並可以包括路徑(如果系統支持)。
mode
r |
w |
a |
r+ |
w+ |
a+ |
讀取:打開文件進行輸入操作。文件必須存在。 |
寫入:為輸出操作創建一個空文件。如果已經存在同名的文件,則丟棄其內容,並將文件視為新的空文件。 |
追加:打開文件,在文件末尾輸出。輸出操作總是在文件末尾寫入數據,並將其展開。重新定位操作(fseek、fsetpos、rewind)將被忽略。如果文件不存在,則創建該文件。 |
讀取/更新:打開文件進行更新(輸入和輸出)。文件必須存在。 |
寫入/更新:創建一個空文件並打開它進行更新(輸入和輸出)。如果同名文件已存在,則將丟棄其內容,並將該文件視為新的空文件。 |
追加/更新:打開一個文件進行更新(包括輸入和輸出),所有輸出操作在文件末尾寫入數據。重新定位操作(fseek、fsetpos、rewind)會影響下一個輸入操作,但輸出操作會將位置移回文件末尾。如果文件不存在,則創建該文件。 |
使用上面的模式說明符,文件將作為文本文件打開。為了將文件作為二進制文件打開,模式字符串中必須包含“B”字符。這個額外的“b”字符可以附加在字符串的末尾(從而形成以下復合模式:“rb”、“wb”、“ab”、“r+b”、“w+b”、“a+b”),也可以插入字母和混合模式的“+”符號(“rb+”、“wb+”、“ab+”)之間。
新的C標准(不是C++的一部分)增加了一個新的標准“x”(“x”),可以附加到任何“W”說明符(形成“0”、“0”、“w”或“W”+“+”)。如果文件存在,此子參數將強制函數失敗,而不是重寫它。
如果序列后面有其他字符,則行為取決於庫實現:有些實現可能會忽略其他字符,以便接受額外的“t”(有時用於顯式聲明文本文件)。
在某些庫實現中,使用更新模式打開或創建文本文件可能會將流視為二進制文件。
文本文件是包含文本行序列的文件。根據應用程序運行的環境,在文本模式下的輸入/輸出操作中可能會發生一些特殊字符轉換,以使它們適應系統特定的文本文件格式。雖然在某些環境中不存在轉換,並且文本文件和二進制文件都以相同的方式處理,但是使用適當的模式提高了可移植性。
對於同時允許輸入和輸出操作的打開更新的文件(包括“+”符號的文件),在執行寫入操作之后的讀取操作之前,應刷新(fflush)流或重新定位(fseek、fsetpos、rewind)。在讀取操作之后的寫入操作之前(當該操作未到達文件結尾時),流應重新定位(fseek、fsetpos、rewind)。
返回值:
如果文件已成功打開,則函數返回指向文件對象的指針,該對象可用於在以后的操作中標識流。
否則,返回空指針。
在大多數庫實現中,Erro變量也被設置為系統特定的錯誤代碼。