使用 C# 修改文件创建时间(图片也可修改)
收到一个需求,希望修改指定文件的创建时间,并且文件数上千。所以希望通过程序来解决。用户的真实意图暂且不论,首先分析这个事情是否可行,立马搜索几篇文章一扫,得可行结论。既然可行那接下来就朝着实现的方向去搜索,修改方法还停简单。虽然这些功能没有对用户开放,但对于程序来说简直容易到不要不要的。
下面是这个工具的界面:
由于是 Windows 桌面应用程序,所以在目标框架的选择上选择了 .NET Framework 2.0,这样做会损失很多的开发便利,但是可以提高用户的体验,只要用户在 Windows 10 或以上系统100%可运行,不需要单独安装框架,因为 .NET Framework 2.0 属于系统默认组件。
下面是核心代码,首先通过用户选择的目标文件夹,找到文件夹下的所有文件,并遍历所有文件将文件的日期改为用户输入的指定日期。
private void button1_Click(object sender, EventArgs e)
{
try
{
var path = txtPath.Text.Trim();
if (string.IsNullOrEmpty(path))
{
button2_Click(sender, e);
return;
}
var source = new DirectoryInfo(path);
var fileList = source.GetFiles();
if (fileList == null || fileList.Length == 0)
{
ShowMessage("看起来这个文件夹里面没有文件,请重新选择");
return;
}
var date = txtCreateTime.Text.Trim();
if (date.Length > 10 || !date.Contains("-"))
{
ShowMessage("日期格式错误,正确格式为:" + DateTime.Now.ToString("yyyy-MM-dd"));
return;
}
if (DateTime.Parse(date).Year < 1980)
{
ShowMessage("日期必须大于 1980 年");
return;
}
var r = new Random();
foreach (var item in fileList)
{
item.CreationTime = DateTime.Parse(date + item.CreationTime.ToString(" HH:mm:ss"));
item.LastWriteTime = DateTime.Parse(date + item.LastWriteTime.ToString(" HH:mm:ss"));
// 如果出现创建时间大于访问时间,将访问时间一并修改
if (item.CreationTime > item.LastAccessTime)
{
var accessTime = item.CreationTime.AddHours(1).AddMinutes(r.Next(1, 20)).AddSeconds(3);
item.LastAccessTime = accessTime;
}
}
lblMessage.Text = "修改完成";
}
catch (Exception ex)
{
ShowMessage(ex.Message);
}
}
public void ShowMessage(string message)
{
lblMessage.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:") + message;
}
前面是一些参数判断,并将焦点设置的一些提升用户体验的代码,要说真正核心就下面两句:
var source = new DirectoryInfo(path);
var fileList = source.GetFiles();
foreach (var item in fileList)
{
item.CreationTime = DateTime.Parse(date + item.CreationTime.ToString(" HH:mm:ss"));
item.LastWriteTime = DateTime.Parse(date + item.LastWriteTime.ToString(" HH:mm:ss"));
}
另外发现一个有趣的现象,日期低于或高于某个点,在当前系统中(Windows Server 2019 版本 10.0.17763.1217)不会显示出来。下面分别修改过高和过低的日期大家看一下,这是文件的初始状态:
所以为了避免被用户玩坏,如果用户输入过低的日期就提示用户,后来想想也许这个判断会影响到用户,现在看起来用户的修改时间范围还没有夸张到跨世纪(因为还没人来问我什么)。好了需求实现并交付。留下一篇记录供参考。
源码下载:https://download.csdn.net/download/S2T11Enterprise/12527655
该工具主要是将照片批量修改拍摄时间,15秒时间完成超过 3000 张照片修改。
如有商业合作请QQ联系:380086154