c# . net中的Windows文件创建日期

本文关键字:文件 创建日期 Windows 中的 net | 更新日期: 2023-09-27 18:08:38

是否有可能同时创建多个文件?很明显,在某些情况下(我不知道那些情况),当我调用FileInfoCreationTimeUtc()方法时,它给我完全相同的时间字符串。我通过查看创建时间来区分同一文件夹下的文件,但由于有时创建时间相同,这破坏了我的方法。在这种情况下,我需要一个适当的文件标识符来标识文件,即使它已被重命名或更改。我不知道我可以使用什么样的标识符来达到这个目的。任何帮助都会很感激。我使用的是c# .net 4.5

c# . net中的Windows文件创建日期

要标识文件,可能需要计算一个校验和,这样就标识了内容,而不是名称、日期或位置。

我使用GetFileInformationByHandle()方法解决了这个问题,如下所示:

private static string GetFilePointer(FileInfo fi)
    {
        var fs = fi.OpenRead();
        var ofi = new BY_HANDLE_FILE_INFORMATION();
        ulong fileIndex = 0;
        if (GetFileInformationByHandle((IntPtr)fs.Handle, out ofi))
        {
            fileIndex = ((ulong)ofi.FileIndexHigh << 32) + (ulong)ofi.FileIndexLow;
        }
        fs.Close();
        return fileIndex.ToString();
    }
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool GetFileInformationByHandle(IntPtr hFile, out BY_HANDLE_FILE_INFORMATION lpFileInformation);
    [StructLayout(LayoutKind.Sequential)]
    struct BY_HANDLE_FILE_INFORMATION
    {
        public uint FileAttributes;
        public FILETIME CreationTime;
        public FILETIME LastAccessTime;
        public FILETIME LastWriteTime;
        public uint VolumeSerialNumber;
        public uint FileSizeHigh;
        public uint FileSizeLow;
        public uint NumberOfLinks;
        public uint FileIndexHigh;
        public uint FileIndexLow;
    }
在NTFS文件系统上,

看起来是一种非常简洁的文件标识符,重命名、内容更改或移动都不会影响它。