考虑我有一个文件'emp.txt',其内容为
EmpNo. Name Phone No. Salary
1 ABC 123 321
2 CBA 456 543
现在我想换手机号码。仅限第一名员工。当我尝试使用ios:ate时,文件的所有内容都被删除,新手机没有。插入了。我该如何解决这个问题?
答案 0 :(得分:2)
如果仅为输出打开文件,则库通常会截断现有文件。要更改文件的现有内容,最简单的方法是以“读/写”模式打开它,这样您就可以寻找正确的位置并部分覆盖其内容。
尝试类似:
std::fstream filestream( "emp.txt", std::ios_base::in | std::ios_base::out );
或者如果你正在使用C流:
FILE* f = fopen( "emp.txt", "r+" );
答案 1 :(得分:1)
更改流程开放模式
在此处查看所有可能的Modes
答案 2 :(得分:0)
对于您的示例,我认为最好是加载整个文件,进行更改然后写回整个文件。如果文件很大则不是。
答案 3 :(得分:0)
在Windows中,MapViewOfFile()在特殊情况下效果很好,在这种情况下,您只是在原位覆盖数字并且文件的尾部无需移动。如果您需要重写整个文件,可以在“Transactional NTFS”上输入维基百科,以获得最终的安心。
我的经验中的内存映射文件非常好用。如果您的进程崩溃,通常您写入的最后一个字节仍将正确刷新到磁盘,因为Windows可以很好地知道哪些页面是脏的。
哪个SUGGESTS“填充您的记录”,以便即使是典型的地址更改也可以在不移动文件尾部的情况下完成。