【问题标题】:C++ Insert text at specific position in append with Windows APIC++ 在特定位置插入文本并附加 Windows API
【发布时间】:2016-05-02 01:53:39
【问题描述】:

在经典文本文件中插入文本时遇到问题。我想做的很简单:在一些行前插入一个字符。我知道每一行开始的确切偏移量。我有一个限制,我必须使用 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 : 这段代码是针对非常大的文件,所以读/写整个文件是不可能的,它会太长。

非常感谢!

【问题讨论】:

  • 为什么读/写选项不可能?您可以分段缓冲/流式传输它吗?
  • 我正在编写的程序正在处理大型文本文件,一种数据库(不是我的选择!)。前面的这个字符在这里将行标记为“已删除”。下一次完整加载将忽略这些行。

标签: c++ file winapi append offset


【解决方案1】:

您不能以您尝试的方式将文本插入文件。您可以将数据附加到末尾,也可以覆盖现有数据。为了实现插入,您必须重写插入点之后的所有内容。

【讨论】:

  • 太糟糕了!所以我没有其他解决方案,我会在插入后重写内容....谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2021-05-01
  • 2011-02-16
  • 2017-10-22
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多