【发布时间】:2012-03-04 23:04:32
【问题描述】:
我需要检索目录的句柄才能调用 ReadDirectoryChangesW。实际上,我需要的还不止这些,但让我们先放轻松。我已将问题范围缩小到:
m_directoryHandle = CreateFileA(
"C:\\Users\\victor\\Documents\\Projets\\libxnotify\\unittests", // __in LPCTSTR lpFileName,
FILE_LIST_DIRECTORY, // __in DWORD dwDesiredAccess,
0, // __in DWORD dwShareMode,
0, // __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
OPEN_EXISTING, // __in DWORD dwCreationDisposition,
0, // __in DWORD dwFlagsAndAttributes,
0 // __in_opt HANDLE hTemplateFile
);
这将返回一个INVALID_HANDLE_VALUE,最后一个错误代码为ERROR_ACCESS_DENIED。不用说,我已经尝试了很多不同的参数,但没有一个起作用。我以 victor 身份运行我的程序,为了确保我确实拥有该 unittests 目录中的权限,我打开了一个命令 shell 并输入:
C:\Users\victor>echo bla >> "C:\Users\victor\Documents\Projets\libxnotify\unittests\test"
它成功了。
【问题讨论】:
-
您是否必须在第一个参数中指定文件名(连同路径)?
C:\\Users...unittests\\filename.txt -
@pmg 嗯,我错误地陈述了我的问题。我真的需要对目录进行处理,以便能够在其上调用
ReadDirectoryChangesW(并监视文件).. -
0fordwShareMode?这是它可能失败的地方,因为您请求一种独占访问句柄...... -
@RomanR 我将尝试使用其他参数并让您知道。
-
Quoted from msdn: "要获取现有目录的句柄,请使用 FILE_FLAG_BACKUP_SEMANTICS 标志调用 CreateFile 函数。"跨度>