Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.NET中的Windows文件创建日期_C#_File_Identity - Fatal编程技术网

C#.NET中的Windows文件创建日期

C#.NET中的Windows文件创建日期,c#,file,identity,C#,File,Identity,是否可能同时创建多个文件?显然,在某些情况下(我不知道这些情况),当我调用FileInfoclassesCreationTimeUtc()方法时,它可能会给出完全相同的时间字符串。我通过查看文件的创建时间来区分同一文件夹下的文件,但由于有时创建时间相同,这会破坏我的方法。在这种情况下,我需要一个适当的文件标识符来标识文件,即使它已重命名或更改。我不知道我可以用什么样的标识符来实现这个目的。任何帮助都将不胜感激。我正在使用C#net 4.5来识别文件,您可能需要计算校验和,以便识别内容,而不是名称

是否可能同时创建多个文件?显然,在某些情况下(我不知道这些情况),当我调用
FileInfo
classes
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;
    }
私有静态字符串GetFilePointer(FileInfo-fi)
{
var fs=fi.OpenRead();
var ofi=新的由_HANDLE _FILE _INFORMATION()创建的文件;
ulong fileIndex=0;
if(GetFileInformationByHandle((IntPtr)fs.Handle,out of i))
{

fileIndex=((ulong)ofi.FileIndexHigh是的,这是可能的,尤其是因为你可以通过编程设置文件的创建日期/时间。你能给我们提供一些更多的背景信息吗?一般来说,按任何日期/时间识别文件对我来说都是一种不好的做法。OP说文件应该跨重命名和更改进行跟踪。任何更改都会使文件无效搞砸