【发布时间】:2012-04-17 20:13:51
【问题描述】:
我正在尝试利用 CreateFile 函数来访问目录信息。但是,我收到一个 5 的 win32 错误代码,这意味着访问被拒绝。请指教。
CreateFile(path, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, IntPtr.Zero);
这是正在进行的调用,如文档中所述,正在使用“FILE_FLAG_BACKUP_SEMANTICS”。 DLL 导入似乎工作正常,如下所示:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr CreateFile(string filename,
uint desiredAccess,
uint sharedMode,
IntPtr securityAttributes,
uint creationDisposition,
uint flagsAndAttributes,
IntPtr templateFile);
更新:我需要获取目录的句柄,这样我才能使用 GetFileInformationByHandle() 并提取唯一 ID。此方法目前适用于文件,目前不适用于目录。
更新:这个问题的 X 是我需要一个目录的唯一标识符,该标识符不是其绝对路径。即使目录被移动或重命名,它也需要保持不变。 .NET没有提供刚才提到的任何唯一标识符,只能通过win32来实现
【问题讨论】:
-
这看起来确实是一个 XY 问题。为什么使用 API 而不是内置功能? meta.stackexchange.com/a/66378/171858
-
我需要 C# 文件 API 未提供的信息,它需要使用 Win32 调用
-
您需要什么信息?
-
我需要获取目录的句柄,这样我才能使用 GetFileInformationByHandle() 并提取唯一 ID。此方法目前适用于文件,目前不适用于目录。
-
广告,也许?我猜它是权限问题,直截了当。
标签: c# winapi directory createfile