【问题标题】:deleting and creating new/overwriting file with same name c# .NET删除和创建具有相同名称的新/覆盖文件 c# .NET
【发布时间】:2020-07-06 08:25:19
【问题描述】:

我正在尝试将图片保存在一个文件夹中,并且每小时我都想保存与旧图片同名的新图片。我试过删除旧照片,调试时,它们会被删除,但是当我尝试创建具有相同名称的新版本时,照片会以旧的日期和时间重新出现。

这是我的代码:

 public void SaveThumbnailsToFolder(List<Thumbnail> thumbnails, Profile p)      {

            foreach (Thumbnail thumbnail in thumbnails)
            {
                Bitmap image = new Bitmap(thumbnail.Image);
                try
                {
                    string path = Path.Combine(p.ThumbnailDownloadFileLocation, String.Format(thumbnail.Name + ".jpg"));
                    if (File.Exists(path))
                    {
                        File.Delete(path);
                    }
                    image.Save(path);
                }
                catch (Exception ex)
                {
                    log.Error(ex.Message);
                }
            }
        }

对我做错了什么有任何想法吗?

【问题讨论】:

  • 这是否意味着:a) 日志中没有错误 b) 调试时可以正常工作?
  • 确保路径正确。如果文件被删除,则时间会有所不同。我认为该文件实际上并未被删除。
  • 基本上,image.Save() 会覆盖文件。我看不出有什么问题。
  • 但它没有覆盖,因为时间仍然是旧时间。
  • 没有错误,文件从 File.Delete 文件夹中消失,然后在 image.Save 时返回旧时间

标签: c# file asp.net-core bitmap file-location


【解决方案1】:

但是当我尝试创建具有相同名称的新版本时,图片 以旧日期和时间重新出现。

对于这个问题,可以在保存图片后使用SetCreationTimeUtc,保证图片创建时间为当前时间。

 image.Save(path);
 File.SetCreationTimeUtc(path, DateTime.UtcNow);

这是我的测试结果:

【讨论】:

    【解决方案2】:

    如果文件实际上被删除但以相同的日期重新出现,那么我的猜测是操作系统使用图像文件中的元数据设置日期。 You could try changing the modified date your self

    File.SetLastWriteTime(path, DateTime.Now);
    

    请看下图,它显示了 Windows 上文件的属性对话框,修改日期早于创建日期。

    File modified date is earlier than creation date

    【讨论】:

      【解决方案3】:

      假设问题是关于文件创建 时间戳,这是 Windows 的一个古老且记录在案的行为。来自GetFileTime 函数的备注

      如果您重命名或删除文件,然后不久将其恢复,Windows 会在缓存中搜索要恢复的文件信息。缓存信息包括其短/长名称对和创建时间。


      [ 编辑 ] Raymond Chen 的The apocryphal history of file system tunnelling 的更多背景:

      为什么会存在隧道?

      当您使用程序编辑现有文件,然后将其保存时,您希望保留原始创建时间戳,因为您正在编辑文件,而不是创建新文件。但在内部,许多程序通过执行保存、删除和重命名操作的组合来保存文件(例如链接文章中列出的那些),并且如果没有隧道,文件的创建时间似乎会发生变化,即使从最终用户的观点,没有文件被创建。

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 2016-01-05
        • 1970-01-01
        • 2019-08-31
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        相关资源
        最近更新 更多