用C ++改变文件的一部分

时间:2009-10-11 07:12:09

标签: c++ file

考虑我有一个文件'emp.txt',其内容为

EmpNo.   Name   Phone No.  Salary

1         ABC    123        321

2         CBA    456        543

现在我想换手机号码。仅限第一名员工。当我尝试使用ios:ate时,文件的所有内容都被删除,新手机没有。插入了。我该如何解决这个问题?

4 个答案:

答案 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“填充您的记录”,以便即使是典型的地址更改也可以在不移动文件尾部的情况下完成。