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 插入点之后的所有内容。
我在将文本附加到经典文本文件中时遇到问题。我想做的很简单:在几行前面插入一个字符。我知道每一行开头的确切偏移量。我有一个限制,我必须使用 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 插入点之后的所有内容。