C++ 在特定位置插入文本附加 Windows API

C++ Insert text at specific position in append with Windows API

我在将文本附加到经典文本文件中时遇到问题。我想做的很简单:在几行前面插入一个字符。我知道每一行开头的确切偏移量。我有一个限制,我必须使用 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 : 此代码适用于非常大的文件,因此无法读取/写入整个文件,它会太长。

非常感谢!

您无法按照您尝试的方式将文本插入到文件中。您可以将数据追加到末尾,也可以覆盖现有数据。为了实现插入,您必须 re-write 插入点之后的所有内容。