2

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

这是我的代码:

 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);
                }
            }
        }

关于我做错了什么的任何想法?

4

3 回答 3

1

如果文件实际上被删除但以相同的日期重新出现,那么我的猜测是操作系统使用图像文件中的元数据设置日期。您可以尝试更改自己的修改日期

File.SetLastWriteTime(path, DateTime.Now);

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

文件修改日期早于创建日期

于 2020-07-06T10:08:35.000 回答
1

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

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

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

这是我的测试结果:

在此处输入图像描述

于 2020-07-07T05:23:49.633 回答
0

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

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


[编辑] Raymond Chen 的文件系统隧道的杜撰历史的更多背景:

为什么隧道存在呢?

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

于 2020-07-07T05:57:45.960 回答