由于工作原因制作了一个小的文件名称转换工具,下面简单介绍一下。
需求:文件中有很多的字符在做一些操作的时候是非法的,例如&等等。所以需要一个工具来去除或者替换掉这些非法的字符。
在晚上查询了一些C#转换文件名字的方法。很多都是利用复制到另外一个目录的方式来变相的解决这个问题的,这个不是我想要的,最后发现一个Com组件可以提供直接变换文件名称的方法,Microsoft Scripting Runtime。下面我就来说下是如何实现的:
首先是建立一个winform工程,在Com组件中找到我们需要的Scripting,添加引用,如图
下面是关键的代码:
代码
1 private void ConvertFileName(DirectoryInfo d)
2 {
3 // 所有文件大小.
4 FileInfo[] fis = d.GetFiles();
5 foreach (FileInfo fi in fis)
6 {
7 string fileName = fi.Name;
8 foreach (string key in ConfigStack.Keys)
9 {
10 fileName = fileName.Replace(key, ConfigStack[key]);
11 }
12
13 if (fileName != fi.Name)
14 {
15 FileSystemObject fso = new FileSystemObjectClass();
16 fso.GetFile(fi.FullName).Name = fileName;
17 this.listBox1.Items.Add(fi.FullName + " 转换为: " + fileName);
18 }
19 }
20 // 遍历出当前目录的所有文件夹.
21 DirectoryInfo[] dis = d.GetDirectories();
22 foreach (DirectoryInfo di in dis)
23 {
24 ConvertFileName(di); //这就用到递归了,调用父方法,注意,这里并不是直接返回值,而是调用父返回来的
25 }
26 }
2 {
3 // 所有文件大小.
4 FileInfo[] fis = d.GetFiles();
5 foreach (FileInfo fi in fis)
6 {
7 string fileName = fi.Name;
8 foreach (string key in ConfigStack.Keys)
9 {
10 fileName = fileName.Replace(key, ConfigStack[key]);
11 }
12
13 if (fileName != fi.Name)
14 {
15 FileSystemObject fso = new FileSystemObjectClass();
16 fso.GetFile(fi.FullName).Name = fileName;
17 this.listBox1.Items.Add(fi.FullName + " 转换为: " + fileName);
18 }
19 }
20 // 遍历出当前目录的所有文件夹.
21 DirectoryInfo[] dis = d.GetDirectories();
22 foreach (DirectoryInfo di in dis)
23 {
24 ConvertFileName(di); //这就用到递归了,调用父方法,注意,这里并不是直接返回值,而是调用父返回来的
25 }
26 }
其中最关键的是15、16行的代码,获取一个文件信息,然后更新文件的名称即可。
其实这个功能也不是难,我会把源码放在这边提供下载。希望能帮到使用到这个功能的同学,呵呵。