std::ios_base::openmode
std::ios_base::in: 打開文件進行讀操作,即讀取文件中的數據
如果指定路徑中沒有包含該文件,不會創建,而且設置std::ios_base::badbit.
std::ios_base::out: 打開文件進行寫操作,即寫入數據到文件。
如果指定路徑中並沒有包含該文件,會創建一個新的.
如果指定的路徑中包含有該文件,那么打開后,會清空文件中內容,其實就是暗含了std::ios_base::truc.
std::ios_base::in | std::ios_base::out: 打開文件進行讀寫操作
如果指定的路徑沒有包含該文件,也不會創建,並且會設置std::ios_base::badbit.
std::ios_base::app: 每次進行寫入操作的時候都會重新定位到文件的末尾.
如果指定路徑不存在該文件那么創建一個.
std::ios_base::ate: 打開文件之后立即定位到文件末尾
如果指定的路徑不存在該文件不會創建.
std::ios_base::trunc: 打開文件,若文件已存在那么,清空文件內容.
如果指定的路徑不存在該文件不會創建.
如果指定的路徑含有該文件那么清空文件中的內容.
std::ios_base::binary: 以二進制的方式對打開的文件進行讀寫.
如果指定的路徑不存在該文件不會創建.
總結:
1,凡包含std::ios_base::out mode的操作方式,如果文件不存在都是會創建.
std::ios_base::out | std::ios_base::app/ate/trunc 這些組合的方式來操作文件,如果指定的路徑該文件不存在就會創建一個空的.
2,如果std::ios_base::in 和 std::ios_base_out同時使用就會按照 std::ios_base_in,也就是即使文件不存在也不會創建.
3,std::ios_base::in | std::ios_base::out | std::ios_base::app/ate/trunc 這些組合的方式來操作文件, 如果指定路徑的文件不存在也不會創建而且會把當前stream的state設置為std::ios_base::badbit.
4,由於std::ios_base::out和std::ios_base::trunc單獨使用的時候在打開已存在文件的情況下都會清空文件內容,因此我們使用的時候要格外注意.例如:我們可以通過std::ios_base::out | std::ios_base::app組合的形式來消除打開已存在文件時候的清空動作.
