用C# Winform做一个文件名批量修改器

猪小花1号2018-08-28 15:14

作者:蓝天祐

我是一名QA,我提bug以后有个习惯,就是将bug的jira地址保存为一个链接存在本地,如下:

每天都要手动的把日期“【XX.XX】”添加在里面,这个反复修改文件名的过程是比较枯燥的,于是我决定写一个窗体tool来实现,窗体如下:

点击选择后会跳出选择的folder路径的界面,这个地方用到了FolderBrowserDialog控件:

之后点击修改就可以修改选择的folder路径下所有的文件名了。

整个窗体的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;

namespace ModifyNamesByLastWriteTime
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
     //这里是“选择”按钮的代码。
private void SelectPath_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
pathText.Text = fbd.SelectedPath;
}
}
     //这里是“修改”按钮的代码。
private void modifyButton_Click(object sender, EventArgs e)
{
DirectoryInfo dir = new DirectoryInfo(pathText.Text);
var fileInfos = dir.GetFiles();
try
{
foreach (var fileInfo in fileInfos)
{
            //如果文件名符合规范,返回值为真,就不更改。
if (CheckIfHasBeenModified(fileInfo))
{
MessageBox.Show(fileInfo.Name + " is in the right format, no need to modify.");
}
            //否则就改。
else
{
              //转换LastWriteTime的格式为“yyyy.mm.dd”。
string LastWriteTime = string.Format("{0:yyyy.MM.dd}", fileInfo.LastWriteTime);
              //在转换格式后的LastWriteTime两边加上“【】”。
string fileNamePre = "【" + LastWriteTime + "】";
              //修改文件名的方法。
fileInfo.MoveTo(pathText.Text + "\\" + fileNamePre + fileInfo.Name.ToString());
}
}
MessageBox.Show("Names of the files have been modified succesfully.");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
     //这是检查文件名是否符合规范的方法。
private static bool CheckIfHasBeenModified(FileInfo file)
{
       //用正则表达式匹配规范字符串。
string pattern = @"^\【[0-9]+\.[0-9]+\.[0-9]+\】$";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
       //这里如果文件名的长度不足12个字符会抛异常,所以只有在文件名长度大于等于12以后才做进一步校验。
if (file.Name.Length >= 12)
{
if (regex.IsMatch(file.Name.Substring(0, 12)))
{
            //匹配规范返回真。
return true;
}
          //否则返回假。
else
{
return false;
}
}
       //否则返回假。
else
{
return false;
}
}
}
}


注释比较详细,就不解释啦。希望对你们的工作有帮助和启发。

运行结果就不截图啦~自己试一试就好。

网易云新用户大礼包:https://www.163yun.com/gift

本文来自博客园天外云归专栏,经作者蓝天祐授权发布。