我试图在他们的生命周期中跟踪文件和文件夹(他们可能被移动或重命名).我已经完成了搜索,发现FileSystemWatcher可能是最流行的跟踪文件和文件夹的方式,但是,这对我来说不起作用,因为应用程序可能会也可能不会一直运行.我选择尝试通过ID跟踪文件夹.
我找到了一种方法来跟踪来自此堆栈帖子的答案的ID中的文件.我可以在此答案中基于方法B成功获取文件ID .
在搜索时我发现这个堆栈帖子说明他使用FSCTL_GET_OBJECT_ID找到了他的解决方案.我花了很多时间试图弄清楚如何使用这个功能,但我无法绕过它.我基本上没有从C#中调用本机Windows函数的经验.
任何人都可以为我推动正确的方向吗?我觉得我必须遗漏一些明显的东西.
有没有理由C#无法访问文件/文件夹ID?跟踪文件/文件夹是不常见的?
编辑,添加代码:
static uint returnVal;
//Working example to get File ID
public static string GetFileId(string path)
{
WinAPI.BY_HANDLE_FILE_INFORMATION objectFileInfo = new WinAPI.BY_HANDLE_FILE_INFORMATION();
FileInfo fi = new FileInfo(path);
FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
WinAPI.GetFileInformationByHandle(fs.Handle, out objectFileInfo);
fs.Close();
ulong fileIndex = ((ulong)objectFileInfo.FileIndexHigh << 32) + (ulong)objectFileInfo.FileIndexLow;
return fileIndex.ToString();
}
public static string GetFolderId(string path)
{
//Get a handle on the given folder
IntPtr cFile = WinAPI.CreateFile( …Run Code Online (Sandbox Code Playgroud)