【问题标题】:Who is responsible for deleting FILE_NOTIFY_INFORMATION.FileName?谁负责删除 FILE_NOTIFY_INFORMATION.FileName?
【发布时间】:2019-07-10 12:16:44
【问题描述】:

Winapi 的ReadDirectoryChanges 使用FILE_NOTIFY_INFORMATION 来呈现它的结果。结构如下所示:

typedef struct _FILE_NOTIFY_INFORMATION {
  DWORD NextEntryOffset;
  DWORD Action;
  DWORD FileNameLength;
  WCHAR FileName[1];
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;

如果我得到这个由winapi填充的结构,我该如何正确删除FileNameWCHAR*?我必须删除它吗?

ReadDirectoryChanges 的示例(不是很多示例)都没有提到删除任何内容。微软当然没有提供任何示例。

【问题讨论】:

  • 没有什么要删除的。它都是FILE_NOTIFY_INFORMATION 对象的一部分。你应该阅读ANYSIZE_ARRAY
  • SDK中有MS示例和旧VC示例。 SDK:Service.cpp:
  • 已记录在案。在 ReadDirectoryChanges 的文档中。
  • FileName 成员没有指针类型。这是一个数组。

标签: c++ winapi readdirectorychangesw


【解决方案1】:

如果您使用malloc,您需要在使用完对象后调用free

例如:

DWORD FileNameLength = 100;
PFILE_NOTIFY_INFORMATION file_notify_info = (PFILE_NOTIFY_INFORMATION)malloc(FIELD_OFFSET(FILE_NOTIFY_INFORMATION, FileName[FileNameLength]));

free(file_notify_info);

参考“Why do some structures end with an array of size 1?”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2017-01-04
    • 1970-01-01
    • 2015-05-07
    • 2013-07-01
    相关资源
    最近更新 更多