0

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

4

2 回答 2

1

要识别文件,您可能需要计算校验和,以便识别内容,而不是名称、日期或位置。看看这里

于 2013-04-10T09:45:13.027 回答
0

我通过使用 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 文件系统上拥有文件标识符的一种非常巧妙的方式,重命名、内容更改或移动不会影响它。

于 2013-04-10T13:11:39.250 回答