C#之批量修改文件名

来源:互联网 发布:宁波知豆电动车租赁 编辑:程序博客网 时间:2024/06/05 07:58

最近喜欢上看一些综艺节目,比如《天天向上》什么的,而且喜欢下载下来看,呵呵。

我一般是在优酷的客户端上下载,可这上面的节目视频文件命名却让我很头疼。它里面的很多节目名没有按发布的时间先后在前面加一个序号;或名字中包含了日期,却放在了后面。下载下来,文件按文件名排序,从前到后根本就是时间顺序。这样我要按时间顺序从前往后看,或都要盾某一期的节目,就得一个一个地、仔细地扫描整个存储目录,觉得十分的不便,尤其是文件数量特别多的时候!(ps:有序是多么的重要的啊!)

上个图吧:


就上图中的情况,要是中间的表示时间的片段“130130”能移到文件名的前面就好了,想了想觉得网上现有的一些改名工具,好像都没有这样的比较偏的功能,它们一般都加前后缀什么的,与我的需要不符。想想咱也也是个半吊子程序员,这点小事还是能,自己动手,丰衣足食吧!

先首:分析一下可行性吧。

看上图中所有的文件名,它都遵守一个格式。如:不可思议的旅程(11) 130130 标清.flv,它分成四段,先是一个内容名:不可思议的旅程(11),接着一个空格之前是时间:130130,再接着一个空格之后是个表示视频大小的词:标清,最后就是一个文件的格式后缀了:.flv。既然是样就好办了,我只要将一个文件名的这是段字符串解析出来,将表示时间的那放到最后前,其它的不变,这样一重命名不就成了吗。

按下这个思路,遍历整个目录,应该就成了吧!

需要的类库

主要是文件和目录操作相关的类,我这里用的有:FileInfo类、DirectoryInfo类、

代码:

下面是我在vs下建的一个控制台项目的主文件,注这个类只针对,我上面说的情况,所写的硬编码。要改的话也方便的。

/* * 描述:批量些文件名 * 作者:AnYuanLzh * 日期:2013/12/05 */using System;using System.IO;namespace BatchAlterFinename{class Program{// 指定一个目录 static public string directoryPath = @"F:\Youku Files\download\有多远走多远 2013";static void Main(string[] args){Console.WriteLine("开始运行,本程序...");// 判断给定的目录是否存在if (!Directory.Exists(directoryPath)){Console.WriteLine("给定的目录不存在");Console.WriteLine("程序结束,按任意键退出本程序结束...");Console.ReadKey();return;}// 返回当前按下目录下的文件列表DirectoryInfo di = new DirectoryInfo(directoryPath);FileInfo[] files = di.GetFiles();// 遍历这个目录int count = 0;foreach (FileInfo f in files){// 获取一个文件的名字,并解析这个名字。string fileName = f.Name;// 方法1/*// 解析这个名字,以空格符来拆分文件名:// 如: “不可思议的旅程(11) 130130 标清.flv” ==> “不可思议的旅程(11)”、“130130”、“标清.flv”string[] nameFragments = fileName.Split(' ');if (nameFragments.Length == 3){count++;// 重命名,将第2段前置string newFileName = nameFragments[1] + " " + nameFragments[0] + " " + nameFragments[2];    // 将第3段前置//string newFileName = nameFragments[2] + " " + nameFragments[0] + " " + nameFragments[1] + " " + nameFragments[3];// 将第4段前置    //string newFileName = nameFragments[3] + " " + nameFragments[0] + " " + nameFragments[1] + " " + nameFragments[2] + " " + nameFragments[4];f.MoveTo(Path.Combine(directoryPath, newFileName));}*/// 方法2// 解析这个名字,以空格符和'.'字符来拆分文件名:// 如: “不可思议的旅程(11) 130130 标清.flv” ==> “不可思议的旅程(11)”、“130130”、“标清"、“flv”string[] nameFragments = fileName.Split(' ','.');if (nameFragments.Length >= 4){count++;// 重命名,将倒数第3段前置int dateIndex = nameFragments.Length - 3;string newFileName = nameFragments[dateIndex];for (int i = 0; i < nameFragments.Length; i++){if (i == dateIndex) continue;if (i != nameFragments.Length - 1){newFileName += " " + nameFragments[i];}else{newFileName += "." + nameFragments[i];}}f.MoveTo(Path.Combine(directoryPath, newFileName));}}Console.WriteLine("已经成因的修改了{0}个文件名", count);Console.WriteLine("程序结束,按任意键退出本程序结束...");Console.ReadKey();}}}


测试通过,有图有真相:



呵呵,这样看起就方便多了。到这里,就算完了,谢谢浏览!

(如有转载,请注明出处:AnYuanLzhhttp://blog.csdn.net/anyuanlzh/article/details/17137041)





原创粉丝点击