檔案操作的openmode

2022-04-06 23:40:43 字數 2726 閱讀 7285

c中檔案的openmode如下:r唯讀

為輸入開啟乙個文字檔案

w只寫為輸出開啟乙個文字檔案

a追加向文字檔案尾新增資料

rb唯讀

為輸入開啟乙個二進位制檔案

wb只寫

為輸出開啟乙個二進位制檔案

ab追加

向二進位制檔案尾新增資料

r+讀寫

為讀寫開啟乙個文字檔案

w+讀寫

為讀寫新建乙個新的文字檔案

a+讀寫

為讀寫開啟乙個文字檔案,並在檔案尾進行寫入

rb+讀寫為讀寫開啟乙個二進位制檔案

wb+讀寫為讀寫新建乙個二進位制檔案

ab+讀寫為讀寫開啟乙個二進位制檔案,並在檔案尾進行寫入

/*

下面的函式是在vs中單步除錯時得到的,具體操作是在fp.open()這裡打個斷點,然後單步除錯(f11)

這裡體現了c中和c++開啟檔案的各種模式的對應關係,即mods和valid中的元素是一一對應的

*/_crtimp2_pure file *__clrcall_pure_or_cdecl _fiopen(const _sysch_t *filename,

ios_base::openmode mode,

intprot)

;static

const

int valid =;

file *fp = 0

;

intn;

ios_base::openmode atendflag = mode &ios_base::ate;

ios_base::openmode norepflag = mode &ios_base::_noreplace;

if (mode &ios_base::_nocreate)

mode |= ios_base::in; //

file must exist

mode |= ios_base::out; //

mode &= ~(ios_base::ate | ios_base::_nocreate |ios_base::_noreplace);

for (n = 0; valid[n] != 0 && valid[n] != mode; ++n)

;

//look for a valid mode

if (valid[n] == 0

)

return (0); //

no valid mode

else

&& (fp = _xfsopen(filename, _sysch("

r"), prot)) != 0

)

else

if (fp != 0 && fclose(fp) != 0

)

return (0); //

can't close after test open

else

if ((fp = _xfsopen(filename, mods[n], prot)) == 0

)

return (0); //

open failed

if (!atendflag || fseek(fp, 0, seek_end) == 0

)

return (fp); //

no need to seek to end, or seek succeeded

fclose(fp);

//can't position at end

return (0

); }

其中的mods和valid是對應的,分別代表c和c++中檔案的openmode,即

下面看c++中檔案操作的openmode

ios::in

開啟檔案進行讀操作,如果檔案不存在,則開啟失敗

ios::out

開啟檔案進行寫操作,如果檔案不存在,則自動建立新檔案[注1、注2]

ios::ate

開啟檔案時,指標定位到檔案末尾(但可以通過seekg/seekp來調節指標位置,從而在指定位置寫入資料)

ios::trunc

開啟檔案時清空原有資料

ios::binary

以二進位制形式開啟檔案,如未設定,則預設以文字形式開啟檔案

最後,ofstream, ifstream 和 fstream所有這些類的成員函式open 都包含了乙個預設開啟檔案的方式,這三個類的預設方式各不相同:

類預設openmode

ofstream

ios::out

ifstream

ios::in

fstream

ios::in | ios::out

注:1.只有當函式被呼叫時沒有宣告方式引數的情況下,預設值才會被採用。如果函式被呼叫時宣告了任何引數,預設值將被完全改寫,而不會與呼叫引數組合。

2.ofstream的預設openmode為ios::out,結合前面所講,其實是ios::out | ios::trunc,且如果檔案不存在會自動建立檔案

3.fstream的預設openmode為ios::in | ios::out,結合前面所講,此時不會清空檔案,且如果不存在也不會自動建立檔案

檔案的操作

在檔案操作之前要匯入命名空間 system.io 讀寫檔案的步驟分為5步 1 建立檔案流 語法 filestream fd new filestream 檔案路徑 filemode 其中 filemode 是列舉型別的,列舉型別的主要作用是約定乙個變數的值的範圍 其中包括有 create 用指定名稱...

檔案的操作

openopen 內建函式,open底層呼叫的是作業系統的介面 f1,變數.f1,fh,file,file handler,f h 檔案控制代碼.通過對檔案的任何操作都會通過檔案控制代碼.的方式.encoding 可以不寫,不寫引數,預設編碼本.預設編碼本 作業系統的預設的編碼 檔案控制代碼 是乙個...

檔案的操作

只要牽扯到檔案的操作,都是字串 開啟檔案用到 w 原始檔內容會被清空 相當於新建 sprip 取消換行符 換行符2個位元組 一 開啟 win gbk mac linux utf 8 f open 歌詞 f 檔案操作符 檔案控制代碼 檔案操作物件 習慣叫 f file f obj f handler ...