【发布时间】:2013-10-25 18:35:05
【问题描述】:
我正在尝试通过 C++ 在特定位置写入大小为 1 MB 的现有空白二进制文件。
ofstream of( filename, ofstream::binary );
of.seekp(1600, of.beg);
of.write(arr, 1024);
of.close();
通过将此缓冲区写入之前的文件来创建空白文件:
char *buffer = (char*)malloc(size);
memset(buffer, ' ', size);
但是这段代码只是截断了整个1MB的空白文件并写入了这1KB的内容,文件的大小变成了1KB。
也尝试使用app 和ate 模式。当我尝试这样的app 模式时:
ofstream of( filename, ofstream::binary | ofstream::app );
of.seekp(1600, of.beg);
of.write(arr, 1024);
of.close();
它将内容添加到文件的末尾。因此文件大小变为 1MB+1KB。
我想要做的是用一些数据覆盖文件中的 1KB 数据(目前它是空白空间)。这样它就不会改变文件大小或任何其他数据。
我哪里做错了?
【问题讨论】:
-
我不是唯一一个好奇“空白二进制文件”是什么的人。我就是不能……
-
对不起,如果我使用了错误的术语。我包含了上面的代码。请检查
-
啊..好的。所以它是一个文件,其前导的预定字节等同于平台相关空间(例如,ascii 0x20 或 ebcdic 0x40)。这更有意义。谢谢。
-
对于它的价值,我发现mmap(Windows 有类似的机制)在读取/更新现有文件中随机偏移的数据时非常方便。恕我直言,使用它的代码往往比使用流搜索的代码更易读。
标签: c++