2016-03-15 19 views
1

Это мой код (без проверки ошибок):C++ fstream перезаписать файл

std::wfstream wfs("C:\\testfile.txt"); 
wfs.setf(std::ios_base::binary); 
std::wstringstream wss; 
wss << wfs.rdbuf(); 
wfs.seekp(0); 
wfs << L"new"; 

Теперь, первые три символа в файле заменяется на «новый». Однако я хотел бы, чтобы «новое» было единственным содержимым файла.

Как это достичь?

+1

'setf' принимает флаги формата в качестве аргумента, а не открытые флаги режима. Вы хотите 'std :: wfstream wfs (« C: \\ testfile.txt », std :: ios_base :: binary)'. – 0x499602D2

+0

О, тогда мне также нужно скопировать аргументы по умолчанию, такие как 'std :: ios :: in | std :: ios :: out | std :: ios :: binary' правильно? –

+1

Нет, они автоматически указываются в 'fstream'. – 0x499602D2

ответ

0

Попробуйте

wfs.setf(std::ios_base::binary,std::ios_base::trunc); 
+0

У меня создалось впечатление, что это стирает файл, прежде чем я смогу его прочитать; это неправильно? –

+0

Да, я думал, это то, что вы хотите! – Samer

+0

Нет, я сначала прочитал содержание! Затем перезапишите файл. Я думал, что 'seekp', за которым следует' << ', усекает его, но это не так. –

Смежные вопросы