【问题标题】:Reading a file from a network share sets its creation time to its last write time从网络共享读取文件会将其创建时间设置为其最后一次写入时间
【发布时间】:2013-02-13 03:23:15
【问题描述】:

当我从网络共享读取文件时,它会将创建时间更新为上次写入时间。这会导致 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 不是这种行为的可能来源。
  • 它是什么样的服务器?请注意,某些文件系统不支持创建时间。
  • 这是不正常的,网络重定向器中有严重的问题。服务器端。
  • 我们的网络管理员正在休假,他现在已经确认问题出在服务器上。我们正在运行一些旧版本的 Samba 3。感谢您的提示!

标签: .net windows file-io network-share


【解决方案1】:

我知道这是一个老问题,但我在我的家庭 Linux 服务器(非常旧的 NAS 机器)上组织一些图像文件时遇到了这个问题。文件创建时间变成了文件复制时间,我发现问题是由于 EXT3 Linux 文件格式不支持任何类型的共享(NFS 和 SAMBA)。将文件移动到 EXT4 和 XFS 文件系统格式解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多