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