c# . net中的Windows文件创建日期
本文关键字:文件 创建日期 Windows 中的 net | 更新日期: 2023-09-27 18:08:38
是否有可能同时创建多个文件?很明显,在某些情况下(我不知道那些情况),当我调用FileInfo
类CreationTimeUtc()
方法时,它给我完全相同的时间字符串。我通过查看创建时间来区分同一文件夹下的文件,但由于有时创建时间相同,这破坏了我的方法。在这种情况下,我需要一个适当的文件标识符来标识文件,即使它已被重命名或更改。我不知道我可以使用什么样的标识符来达到这个目的。任何帮助都会很感激。我使用的是c# .net 4.5
要标识文件,可能需要计算一个校验和,这样就标识了内容,而不是名称、日期或位置。
我使用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文件系统上,看起来是一种非常简洁的文件标识符,重命名、内容更改或移动都不会影响它。