【问题标题】:C++ Overwriting Contents of a HandleC++ 覆盖句柄的内容
【发布时间】:2021-05-17 22:38:14
【问题描述】:

我正在尝试从 HANDLE 文件中获取一个数字,将其存储在一个 int 中,并可能将其替换到同一个文件中。我的代码现在看起来像这样

HANDLE numFile = INVALID_HANDLE_VALUE;  //Just in case file not found
numFile = CreateFile("numFile.txt", 
                     GENERIC_READ | GENERIC_WRITE, 
                     FILE_SHARE_READ, 
                     NULL, 
                     OPEN_EXISTING, 
                     FILE_ATTRIBUTE_NORMAL, 
                     NULL);
ReadFile(numFile, input, sizeof(char), &bytesRead, NULL);
int myNumber = input[0];

我知道 API 中有一个 WriteFile 方法,但看起来它会附加文件而不是覆盖内容。我曾简要地考虑过每次删除和重新创建文件,但这对于这个问题来说似乎不必要地复杂。有什么想法吗?

【问题讨论】:

  • 你读过documentation吗?您正在使用OPEN_EXISTING 作为dwCreationDisposition 参数,而这听起来像是您想要TRUNCATE_EXISTING
  • 这必须使用Windows API吗?有跨系统工作的标准文件 I/O。

标签: c++ file winapi


【解决方案1】:

使用SetFilePointer 之前的WriteFile 函数返回起点

SetFilePointer(numFile, 0, NULL, FILE_BEGIN);

【讨论】:

  • 这不会将新数字附加到文件的开头吗?而不是覆盖?
  • 只能追加到文件的末尾,在另一个位置的任何写入都会覆盖该位置的数据。
  • 不需要使用SetFilePointer。需要在OVERLAPPED中传递文件偏移量
猜你喜欢
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多