C#之批量修改檔案名稱

來源:互聯網
上載者:User

最近喜歡上看一些綜藝節目,比如《天天向上》什麼的,而且喜歡下載下來看,呵呵。

我一般是在優酷的用戶端上下載,可這上面的節目視頻檔案命名卻讓我很頭疼。它裡面的很多節目名沒有按發布的時間先後在前面加一個序號;或名字中包含了日期,卻放在了後面。下載下來,檔案按檔案名稱排序,從前到後根本就是時間順序。這樣我要按時間順序從前往後看,或都要盾某一期的節目,就得一個一個地、仔細地掃描整個儲存目錄,覺得十分的不便,尤其是檔案數量特別多的時候。(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();}}}


測試通過,有圖有真相:



呵呵,這樣看起就方便多了。到這裡,就算完了,謝謝瀏覽。

(如有轉載,請註明出處:AnYuanLzh:http://blog.csdn.net/anyuanlzh/article/details/17137041)





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.