c++ - c ++如何使用fstream修改文件
问题描述
我想编辑文件的前 100 个字符,我这样做了,但是新字符会覆盖以前的字符(如照片)
我的代码:
fstream fileStreamIn("text.txt", ios::in | ios::out | ios::binary);
int theSize = 100;
string theMainBuffer(theSize, '\0');
fileStreamIn.read(&theMainBuffer.front(), theSize);
theMainBuffer.resize(fileStreamIn.gcount());
//cout << theMainBuffer << endl;
fileStreamIn.close();
fileStreamIn.open("text.txt", ios::in | ios::out | ios::binary);
fileStreamIn << "blahblah ";
fileStreamIn.close();
我希望将“blahblah”添加到文件的内容中,并且不删除“helloworld”的先前内容
输出 :
blahblahrld !
è !©ª}2•¼Ü²ùXkLÉ·ð„!ð–ç„ñWïðʃ¡ åñ·§Dß}ˆ¹mÐÕŠw:—*ËtMÒJf-Öù“hñ<³:rÛä‡ ”‘Ôyv-4mXþeߧzè’¬ŒŽ<¤‘“‰l'g‚Šâ¡;¬Èa|ÔÁ3îú€;‰±Ï.ÖLáÑȽ[ïÿÿúU%ã2§Ls§n~çˆÏÔäÔ™ 4øÒ‘Ö°,y•»Ô'`` ¬ÜgÜò`÷Tº^E1ØàùÛ÷i§d¨Ù`I5»7á8Zéz0¥Ž’3Y7Êœ¦}eíÝΦIm?óbÙOâ-ŸäëŠgýhýR
Â3‘†y±è±/VŠ¤?Ïù4?’ÑûIÆLQ~DãŠ?Ôêð#N ]³böPK ZQamë š PK 5 -
我想要这个输出:
blahblah hello world !
è !©ª}2•¼Ü²ùXkLÉ·ð„!ð–ç„ñWïðʃ¡ åñ·§Dß}ˆ¹mÐÕŠw:—*ËtMÒJf-Öù“hñ<³:rÛä‡ ”‘Ôyv-4mXþeߧzè’¬ŒŽ<¤‘“‰l'g‚Šâ¡;¬Èa|ÔÁ3îú€;‰±Ï.ÖLáÑȽ[ïÿÿúU%ã2§Ls§n~çˆÏÔäÔ™ 4øÒ‘Ö°,y•»Ô'`` ¬ÜgÜò`÷Tº^E1ØàùÛ÷i§d¨Ù`I5»7á8Zéz0¥Ž’3Y7Êœ¦}eíÝΦIm?óbÙOâ-ŸäëŠgýhýR
Â3‘†y±è±/VŠ¤?Ïù4?’ÑûIÆLQ~DãŠ?Ôêð#N ]³böPK ZQamë š PK 5 -
什么问题,我该如何解决这个问题?谢谢
解决方案
如果您不想保留前 100 个字节,只需创建 100 个长度的字符串,更改一些值并将其写入流就足够了。不需要读取文件。
std::fstream fs("text.txt", ios_base::out | ios_base::binary);
string buffer(100, ' ');
string update="Hello";
buffer.replace(0, update.size(), update);
fs.seekp(20); // move to write position
fs.write(buffer.data(), buffer.size());
fs.close();
推荐阅读
- angularjs - 在angularjs中的.html文件中刷新页面时调用方法
- ios - 在 didSelectRowAt indexPath 函数之外访问 IndexPath.row
- java - 在recyclerview中回收edittext
- swift - 如何实现一个符合相互关联协议之一的泛型类?
- jquery - 如何在jquery中取消选择选定的固定列数据表
- sql - SQL 查询中的 Microsoft.Azure.Documents.DocumentClientException
- python - 如何修复 rasberrypie3 python 中的“chrome 无法访问”和“DevToolsActivePort 文件不存在”错误
- node.js - 如何利用 Docker 在 Travis CI 上运行多种语言的测试
- getstream-io - 如何通过检查字段是否包含 GetStream-IO 上的字符串来查询频道
- angularjs - Angularjs Datatable 从列可见性中排除列