首页 > 解决方案 > 谁负责删除 FILE_NOTIFY_INFORMATION.FileName?

问题描述

WinapiReadDirectoryChanges用于FILE_NOTIFY_INFORMATION呈现它的结果。该结构如下所示:

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

如果我让这个结构由 winapi 填充,我该如何正确删除FileName WCHAR*?我必须删除它吗?

没有一个例子(不是很多例子)ReadDirectoryChanges提到删除任何东西。Microsoft 当然根本没有提供任何示例。

标签: c++winapireaddirectorychangesw

解决方案


如果你使用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);

请参阅“为什么有些结构以大小为 1 的数组结尾? ”。


推荐阅读