| 文件流 | ios::app | ios::ate | ||
| 打開方式 | 結(jié)果 | 打開方式 | 結(jié)果 | |
| ofstream (默認(rèn)是 ios::in | ios::trunc) | ios::app或ios::app|ios::out | 如果沒(méi)有文件,生成空文件; 如果有文件,在文件尾追加 | ios::ate或ios::ate|ios::out | 如果沒(méi)有文件,生成空文件; 如果有文件,清空該文件 | 
| ios::app|ios::in | 不管有沒(méi)有文件,都是失敗 | ios::ate|ios::in | 如果沒(méi)有文件,打開失敗; 如果有文件,定位到文件尾,可以寫文件,但是不能讀文件 | |
| Ifstream (默認(rèn)是ios::in) | ios::app或ios::app|ios::out | 不管有沒(méi)有文件,都是失敗 | ios::ate或ios::ate|ios::out | 如果沒(méi)有文件,打開失敗;如果有文件,定位到文件尾,但是不能寫文件 | 
| ios::app|ios::in | ? | ios::ate|ios::in | ? | |
| fstream (默認(rèn)是ios::in | ios::out) | ios::app|ios::out | 如果沒(méi)有文件,創(chuàng)建文件; 如果有文件,在文件尾追加 | ios::ate|ios::out | 如果沒(méi)有文件,創(chuàng)建文件; 如果有,清空文件 | 
| ios::app|ios::in | 如果沒(méi)有文件,失敗 | ios::ate|ios::in | 如果沒(méi)有文件,失敗 | |
| N/A | N/A | ios::ate|ios::out|ios::in | 如果沒(méi)有文件,打開失敗, 如果有文件,定位到文件尾 | |
| 總結(jié) | ios::app不能和ios::in相配合, 但可以和ios::out配合,打開輸入流 | ios::ate可以和ios::in配合,此時(shí)定位到文件尾; 如果沒(méi)有ios::in相配合而只是同ios::out配合,那么將清空原文件; | ||
| 區(qū)別 | app會(huì)在每次寫操作之前都把寫指針置于文件末尾, | 而ate模式則只在打開時(shí)才將寫指針置于文件末尾。在文件操作過(guò)程中,可以通過(guò)seekp等操作移動(dòng)指針位置。 | ||
| 例子: 多個(gè)線程或者進(jìn)程對(duì)一個(gè)文件寫的時(shí)候,假如文件原來(lái)的內(nèi)容是abc | 以ios::app: 第一個(gè)線程(進(jìn)程)往里面寫了個(gè)d,第二個(gè)線程(進(jìn)程)寫了個(gè)e的話,結(jié)果是abcde | 以ios::ate: 后面寫的會(huì)覆蓋前面一個(gè)寫的,第一個(gè)線程(進(jìn)程)往里面寫了個(gè)d,第二個(gè)線程(進(jìn)程)寫了個(gè)e的話,結(jié)果為abce | ||
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注