从网络共享读取文件会将其创建时间设置为最后写入时间

6
当我从网络共享中读取文件时,它会将创建时间更新为最后写入时间。这会导致System.Configuration.Configuration出现问题,因为它认为文件已更改,从而抛出异常(配置文件已被另一个程序更改)。解决方法是提前手动将创建时间设置为最后写入时间。但我想知道这是否是一个已知的问题。
以下是一些测试代码:
    string filePath = @"X:\SomeFile.txt";
    FileInfo fileInfo = new FileInfo(filePath);
    DateTime creationTimeBeforeRead = fileInfo.CreationTimeUtc;
    FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
    byte[] result = new byte[fileStream.Length];
    fileStream.Read(result, 0, (int)fileStream.Length);
    fileStream.Close();
    fileInfo.Refresh();
    DateTime creationTimeAfterRead = fileInfo.CreationTimeUtc;

我不知道问题是出现在 .net、Windows API 还是服务器端。有没有人能够提供一些见解呢?


我刚刚尝试使用记事本打开它,发现同样的问题出现了。因此,我猜测 .net 不可能是这种行为的源头。 - ctusch
它是什么类型的服务器?请注意,某些文件系统不支持创建时间。 - Raymond Chen
1
这不正常,网络重定向器出现了严重的问题。服务器端。 - Hans Passant
我们的网络管理员在度假期间,他现在确认问题出在服务器上。我们正在运行一些旧版本的Samba 3。感谢提示! - ctusch
1个回答

1

我知道这是一个老问题,但我在整理家里的Linux服务器(非常老的NAS盒子)上的一些图像文件时遇到了它。文件创建时间显示为文件复制时间,我发现问题是由于EXT3 Linux文件格式不支持任何类型的共享(NFS和SAMBA)而导致的。将文件移动到EXT4和XFS文件系统格式可以解决我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接