小编Mat*_*att的帖子

获取文件夹ID C#

我试图在他们的生命周期中跟踪文件和文件夹(他们可能被移动或重命名).我已经完成了搜索,发现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)

c# windows winapi deviceiocontrol

5
推荐指数
1
解决办法
3441
查看次数

标签 统计

c# ×1

deviceiocontrol ×1

winapi ×1

windows ×1