vb.net - System.IO 文件创建日期行为问题
问题描述
我编写了一个 Windows 服务,将未压缩的大图像与其小得多的缩略图进行比较,以确定哪些图像需要新的缩略图或根本没有缩略图......我正在使用文件的创建日期来确定哪些需要更新(如果未压缩图像的创建日期大于缩略图,则缩略图已过期)。
一切都很好,我唯一的问题是当我将新版本的缩略图保存在现有的缩略图上时......起初我只是做一个简单的Bitmap.Save
但是当覆盖它只会改变文件的修改日期。我在File.Delete()
保存新版本之前添加了它,它删除了旧版本,保存了一个新版本(应该如此),但是新文件的创建日期仍然是旧的创建日期......
我删除了每个旧缩略图,等待了几分钟,然后再次运行创建代码,全新的创建日期......是否有一些时间框架 Windows 将文件数据存储在内存中,也许它可以识别相同的文件名并将新文件赋予旧文件创建日期???
解决方案
根据File.SetCreationTime(String, DateTime) Method的文档,
NTFS 格式的驱动器可能会在短时间内缓存文件元信息,例如文件创建时间。因此,如果您要覆盖或替换现有文件,可能需要显式设置文件的创建时间。
但是,如果您要谨慎,请重命名原始文件,例如在末尾加上“.old”。这样,它必须为新文件创建一个新的目录条目。然后,如果出现严重错误,它的 .old 副本仍然存在(直到您将其删除)。
推荐阅读
- react-native - React Native WebView - 仅在用户交互的情况下在外部浏览器中打开链接
- python - Python将输入文件中的行/单词拆分为变量
- excel - VBA Date + TimeValue 不返回时间
- c++ - cpp 函数,根据模板类型返回值
- spring-boot - 如果我想保存以下类型的 JSON 对象,如何在 Java 中构造 DTO。使用杰克逊
- reactjs - TextField 只接受一个字母并失去焦点
- android - 加载时在webview中显示白页(PDF url)url android
- python - 覆盖类变量和并发 Flask 请求
- firebase - 如何从 Firebase REST API 获取排序数据
- qt - QML GridView contentItem 子项长度与计数不匹配