C ++使用Windows API在特定位置插入文本

时间:2016-01-25 16:54:55

标签: c++ file winapi append offset

我在插入文本时遇到麻烦,附加在经典文本文件中。我想做的很简单:在一些行的前面插入一个字符。我知道每行开始的确切偏移量。我有一个限制,我必须使用Windows API:CreateFile(),WriteFile(),SetFilePointer()...

我无法插入文本,无论我做什么,程序写到最后,或者如果它写入良好的偏移量,它都会删除现有文本。

这是我的代码(我只是将一些检查简化为更易读):

HANDLE handleFile = CreateFile (filename,
                                FILE_APPEND_DATA,
                                FILE_SHARE_READ, //SHARE
                                NULL, //SecurityAttibute
                                OPEN_ALWAYS,
                                FILE_ATTRIBUTE_NORMAL,
                                NULL);

if (handleFile != INVALID_HANDLE_VALUE) {
    if (SetFilePointer (handleFile, 12345, NULL, FILE_BEGIN) != INVALID_SET_FILE_POINTER) {
          DWORD written = 0;
          WriteFile (handleFile, "$", 1, &written, NULL);
    }
}

当我使用FILE_APPEND_DATA时,SetFilePointer()不起作用,我的角色被写到最后。

当我使用GENERIC_WRITE,甚至是FILE_GENERIC_WRITE时,字符以良好的偏移量写入,但它会删除当前字符:'(

真正插入的好参数是什么?

PS:这段代码适用于非常大的文件,所以读/写整个文件是不可能的,也就是太长了。

非常感谢!

1 个答案:

答案 0 :(得分:2)

您无法以尝试的方式将文本插入文件中。您可以将数据附加到最后,也可以覆盖现有数据。为了实现插入,您必须重新编写插入点之后的所有内容。