【发布时间】: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