C 多檔案重新命名思路及實現 下 例項

2021-07-31 14:52:09 字數 1810 閱讀 8887

c# 多檔案重新命名思路及實現 下:例項

檔案重新命名要求:

將pic目錄下的**進行重新命名,命名規則:(1) 道路**編號01-09;(2) 建築物**編號11-19;(3) 其他類別**檔名順序41以後。

源檔名形如:「道路名稱_0101_0_2322.jpg」,釋義為「被拍攝物件的名稱」+「下劃線」+「被拍攝物件的類別編碼」+「下劃線」+「被拍攝物件的多**類別」+「下劃線」+「四位隨機數」.jpg。

其中多**類別即道路**對應0,建築物**對應1,其他類別**對應4。

重新命名後檔名形如:「道路名稱_0101_01.jpg"。

說明:每個被拍攝物件可能會有多張**(最多9張),此時要將末尾的四位隨機數換成編號遞增進行處理。被拍攝名稱會不同,其類別會不同,其多**類別會不同,故每次出現不同,在對應其多**類別的同時編號都要從1開始遞增。

最初思路:

1、從原檔名filename中分別解析出:被拍攝物件名稱(stdname)、類別(type)、多**類別(mediatype);

2、對於同一物件相同類別的多張**進行計數操作,將第1步解析出來的部分結合該計數進行組合即可。

起初感覺這樣可以,但實現時依次對每個檔案處理時卻發現由於stdname,type,mediatype都有可能不同,無法確定計數起點和終點。但分部分重新組合是可行的,故問題轉換為如何確定最後一位的遞增數目。大牛鵬哥指點了下,」先對所有檔案排序,出現stdname、type、mediatype不同就截斷進行處理...「,按照鵬哥的思路我想了乙個」盒子演算法「。

」盒子演算法「的主要思路是:

定義乙個盒子box(即listbox),對filenamelist中各項先排序(sort排序即可),排序後兩兩比較(稱為前項first和後項second),滿足條件m(【條件m:前項後項的stdname、type、mediatype三項都相同,說明兩項是同一物體同類別且同多**型別的不同**】)則將後項入盒,盒子狀態置為開啟,first = second,second = second.next,繼續迴圈比較;若不滿足條件m,說明兩項已不是同一組的**(不論是名稱不同、類別不同或多**型別不同,總之該項的末尾命名編號是*1),盒子狀態置為關閉(盒子狀態對最開始初始化時的first有效,因為最初要先將first入盒,確保只有乙個檔案,或第乙個檔案跟第二個檔案不同類時前者能被正確處理),對盒子內的項重新命名,清空盒子,first = second, second = second.next,迴圈繼續。直到最後乙個檔案時,單獨處理。

簡單地講,就是迴圈進行兩兩比較,條件m都匹配的則入盒直到遇到不匹配的,這樣當前盒子裡都是同一種類的**,再集中對其按次序命名;每次不匹配就可以立即對盒子裡的項進行重新命名。

其關鍵**如下:

private void prerename()

if (match(first, second))

else

index++;

if (index == picnamelist.count)// 說明是最後乙個檔案,單獨處理,處理完跳出迴圈即可

if (match(first, second))

else

}} while (index < filenamelist.count);

}private bool match(string first, string second)

else

}

雖然只是個簡單的重新命名功能,但實際的需求往往並不一定那麼順暢,需要自己再做一些思考,這本身就是很好的學習。在紙上寫下偽**,再**實現,再一步步完善。

C 檔案重新命名

來自 c 裡面,重新命名檔案時,沒有 rename 這個功能,使用的是fileinfo.moveto的方式,moveto 到原目錄裡乙個新的名字,即實現了重新命名 此方法用於重新命名資料夾內的所有子資料夾的名稱,新子資料夾的名稱可以使用格式字串,如dir,重新命名後的子資料夾為 dir0001 di...

C 重新命名檔案

批量重新命名資料夾下的檔案 借用visualbasic中的方法 首先新增引用 microsoft.visualbasic 然後在所需使用的文件中加上using microsoft.visualbasic.devices 命名空間 主要 computer mycom new computer myco...

python實現檔案重新命名

encoding utf 8 importos path demo1 filelist os.listdir path 該資料夾下所有的檔案 包括資料夾 count 0 forfileinfilelist print file forfileinfilelist 遍歷所有檔案 olddir os.p...