删除和创建同名c#.NET的新文件/覆盖文件

删除和创建同名c#.NET的新文件/覆盖文件,c#,file,asp.net-core,bitmap,file-location,C#,File,Asp.net Core,Bitmap,File Location,我正在尝试将图片保存到文件夹中,每小时我都希望保存与旧图片同名的新图片。我尝试过删除旧图片,在调试时,它们会被删除,但当我尝试使用相同的名称创建新版本时,图片会以旧的日期和时间重新出现 这是我的代码: public void SaveThumbnailsToFolder(List<Thumbnail> thumbnails, Profile p) { foreach (Thumbnail thumbnail in thumbnails)

我正在尝试将图片保存到文件夹中,每小时我都希望保存与旧图片同名的新图片。我尝试过删除旧图片,在调试时,它们会被删除,但当我尝试使用相同的名称创建新版本时,图片会以旧的日期和时间重新出现

这是我的代码:

 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);
                }
            }
        }
public void SaveThumbnailsToFolder(列出缩略图,配置文件p){
foreach(缩略图中的缩略图)
{
位图图像=新位图(缩略图图像);
尝试
{
string path=path.Combine(p.ThumbnailDownloadFileLocation,string.Format(thumbnail.Name+“.jpg”);
if(File.Exists(path))
{
删除(路径);
}
image.Save(路径);
}
捕获(例外情况除外)
{
日志错误(例如消息);
}
}
}

你知道我做错了什么吗?

如果文件确实被删除了,但以相同的日期重新出现,那么我猜操作系统会使用图像文件中的元数据设置日期

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

但当我尝试创建同名的新版本时,图片 重新显示旧的日期和时间

对于此问题,可以在保存图像后使用,以确保图像创建时间为当前时间

 image.Save(path);
 File.SetCreationTimeUtc(path, DateTime.UtcNow);
这是我的测试结果:


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

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


[编辑]陈雷蒙的更多背景:

为什么隧道会存在

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


这是否意味着:a)日志中没有错误,b)调试时工作正常?确保路径正确。如果文件被删除,则时间会有所不同。我认为该文件实际上没有被删除。基本上,
image.Save()
覆盖该文件。我看不到任何问题。但它没有被覆盖,因为时间仍然是旧时间。没有错误,文件正在从文件上的文件夹中消失。删除,然后在图像保存时返回旧时间
 image.Save(path);
 File.SetCreationTimeUtc(path, DateTime.UtcNow);