C# 同一文件不同的创建时间

C# 同一文件不同的创建时间,c#,windows,ienumerable,fileinfo,C#,Windows,Ienumerable,Fileinfo,我查看的是完全相同的文件,返回的创建时间不同: FileInfo实例作为参数传递给函数 函数中的IEnumerable 请看下面,我在看同一个文件(名称相同,见红色框),但创建时间不同(见绿色框)。这怎么可能,我该如何解决?它们应该是一样的。事实上,这个文件(OptionTraderLog-2020-08-31_16_60_02_000018.tce)甚至不应该出现在Linq表达式(B)中,因为我正在查找创建时间大于这个文件的所有文件 请参阅此功能的相关部分: protected

我查看的是完全相同的文件,返回的创建时间不同:

  • FileInfo
    实例作为参数传递给函数
  • 函数中的
    IEnumerable
请看下面,我在看同一个文件(名称相同,见红色框),但创建时间不同(见绿色框)。这怎么可能,我该如何解决?它们应该是一样的。事实上,这个文件(
OptionTraderLog-2020-08-31_16_60_02_000018.tce
)甚至不应该出现在Linq表达式(
B
)中,因为我正在查找创建时间大于这个文件的所有文件

请参阅此功能的相关部分:

    protected override FileInfo GetNextFile(FileInfo currentLiveFile)
    {
        // currentLiveFile is A)
        // IEnumerable generated below is B)
        var allFilesInDirectory = currentLiveFile.Directory.GetFiles()
                                                           .Where(f => f.CreationTime > currentLiveFile.CreationTime)
                                                           .Where(f => Path.GetExtension(f.Name) == _fileExtension)
                                                           .OrderBy(f => f.CreationTime);
        // Rest of function...
    }
windows指定的创建时间与上午10:34:35对齐,但创建时间和写入时间相同。我认为Windows正在考虑将
CreationTime
作为
WriteTime


我通过对作为参数传递到函数中的
FileInfo
对象和枚举中的每个
FileInfo
对象(在
.Where()
中)调用
.Refresh()
解决了这个问题,如下所示:

Func greaterCreationTimeHandFile=(f)
=>
{
f、 刷新();
返回f.CreationTime>currentLiveFile.CreationTime;
};
//
//currentLiveFile.Directory.GetFiles()。其中(GreaterCreationTimeHandFile)。。。。
//

Windows允许任意修改文件的创建、修改、上次写入和上次访问时间。根据底层文件系统或网络重定向器的不同,内存中文件控制块(FCB)或磁盘上文件记录(例如NTFS中的MFT记录)中的时间戳可能与目录项不同步。特别是如果文件具有硬链接,则给定硬链接的目录条目将反映上次使用该链接访问该文件时的时间戳,这可能与FCB或文件记录中的当前值存在显著差异。目录项不可靠。这仍然是一个竞争条件,您无法确定在
Refresh()
返回后没有人会更改时间戳。@TanveerBadar它在一个我知道没有人会碰的文件夹中。
            Func<FileInfo, bool> GreaterCreationTimeThanFile = (f) 
            =>
            {
                f.Refresh();
                return f.CreationTime > currentLiveFile.CreationTime;
            };

//
// currentLiveFile.Directory.GetFiles().Where(GreaterCreationTimeThanFile)....
//