国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[工具類]文件或文件夾xx已存在,則重命名為xx(n)

2019-11-17 02:42:39
字體:
供稿:網(wǎng)友

[工具類]文件或文件夾xx已存在,則重命名為xx(n)

寫在前面

最近在弄一個(gè)文件傳輸?shù)囊粋€(gè)東東,在接收文件的時(shí)候,如果文件已經(jīng)存在,該如何處理?提示?刪除?感覺直接刪除實(shí)在不太合適,萬一這個(gè)文件對用戶來說很重要,你給他刪除了肯定不行。然后就想到了,windows系統(tǒng)在新建文件的時(shí)候,如果文件存在就以(n)這樣的形式創(chuàng)建。當(dāng)時(shí)覺得這種方式確實(shí)不錯(cuò),查找了windows的api,未果,然后就想如果讓自己實(shí)現(xiàn),該如何去實(shí)現(xiàn)?

工具類

  1 using System;  2 using System.Collections.Generic;  3 using System.IO;  4 using System.Linq;  5 using System.Text;  6 using System.Text.RegularExPRessions;  7 using System.Threading.Tasks;  8   9 namespace Wolfy.SaveAs 10 { 11     /// <summary> 12     /// 重命名輔助類 13     /// </summary> 14     public class ReNameHelper 15     { 16         /// <summary> 17         /// 保存同名文件時(shí),進(jìn)行重命名操作. 18         /// 例如文件夾內(nèi)已存在1.txt,則再次保存時(shí)保存為1(1).txt,....1(n).txt 19         /// </summary> 20         /// <param name="strFolderPath">保存的目錄</param> 21         /// <param name="strFileName">文件名</param> 22         /// <returns>新的文件名</returns> 23         public static string ReFileName(string strFolderPath, string strFileName) 24         { 25             //當(dāng)前傳進(jìn)的文件名自帶的索引 26             int intCurrentFileIndex = 0; 27             string strNewName = string.Empty; 28             //用來保存當(dāng)前目錄下的文件的最大索引。 29             int intMaxIndex = 0; 30             //如果文件不存在,直接返回 31             if (!File.Exists(Path.Combine(strFolderPath, strFileName))) 32             { 33                 return strFileName; 34             } 35             //根據(jù)傳進(jìn)來的文件名,獲取擴(kuò)展名 36             string strExtention = Path.GetExtension(strFileName); 37             string strFileNameWithoutExtion = Path.GetFileNameWithoutExtension(strFileName); 38             //如果文件名中本身就包括括號,則需要還原原來的文件名 39             string strNameContainsBracketsRegex = "(?<fileName>.+?)" + "([((](?<fileNameIndex>//d+)[))])" + strExtention; 40             Regex regexContain = new Regex(strNameContainsBracketsRegex, RegexOptions.Singleline); 41             if (regexContain.IsMatch(strFileName)) 42             { 43                 Match match = regexContain.Match(strFileName); 44                 strFileNameWithoutExtion = match.Groups["fileName"].Value; 45                 intCurrentFileIndex = Convert.ToInt32(match.Groups["fileNameIndex"].Value); 46             } 47             //根據(jù)傳進(jìn)來的文件名,通過正則匹配,找到類似的文件名,不區(qū)別中英文的括號并且括號及索引可有可無 48             string strRegex = strFileNameWithoutExtion + "([((](?<fileNameIndex>//d+)[))])" + strExtention; 49             Regex regex = new Regex(strRegex, RegexOptions.Singleline); 50             string[] strFileNames = Directory.GetFiles(strFolderPath, "*" + strExtention) 51                 .Where(x => regex.IsMatch(x) || x.Contains(strFileNameWithoutExtion)) 52                 .ToArray(); 53             if (strFileNames != null && strFileNames.Length > 0) 54             { 55                 foreach (string item in strFileNames) 56                 { 57                     //因?yàn)楂@得的文件路徑數(shù)組中都是匹配成功的路徑,此處不再進(jìn)行判斷是否匹配 58                     Match match = regex.Match(item); 59                     //獲得索引 60                     string strIndex = match.Groups["fileNameIndex"].Value; 61                     //如果為空,說明只有類似 1.txt這樣的文件,則返回的文件就是1(1).txt 62                     //否則找到最大索引,然后拼接最大索引加一的文件名 63                     if (!string.IsNullOrEmpty(strIndex)) 64                     { 65                         int intIndex = Convert.ToInt32(strIndex); 66                         if (intMaxIndex < intIndex) 67                         { 68                             intMaxIndex = intIndex; 69                         } 70                     } 71                 } 72                 //如果目錄中存在的文件索引大于或者等于當(dāng)前傳進(jìn)來的文件的索引則使用新的名稱,否則將返回傳進(jìn)來的文件名稱 73                 if (intMaxIndex >= intCurrentFileIndex) 74                 { 75                     //循環(huán)接收,求出了最大的索引,則新文件的索引就是最大索引加一 76                     StringBuilder sb = new StringBuilder(); 77                     sb.Append(strFileNameWithoutExtion); 78                     sb.Append("("); 79                     sb.Append((intMaxIndex + 1).ToString()); 80                     sb.Append(")"); 81                     sb.Append(strExtention); 82                     strNewName = sb.ToString(); 83                 } 84                 else 85                 { 86                     strNewName = strFileName; 87                 } 88             } 89             else 90             { 91                 //如果沒有匹配到相似的文件名結(jié)構(gòu),則說明是一個(gè)新的文件,則不做任何操作 92                 strNewName = strFileName; 93             } 94             return strNewName; 95         } 96         /// <summary> 97         /// 保存同名文件夾時(shí),進(jìn)行重命名操作. 98         /// 例如文件夾內(nèi)已存在1的文件夾,則再次保存時(shí)保存為1(1),....1(n) 99         /// </summary>100         /// <param name="strFolderPath">保存的目錄</param>101         /// <param name="strFolderPath">保存的目錄</param>102         /// <returns>新的目錄名</returns>103         public static string ReFolderName(string strFolderPath, string strFolderName)104         {105             //當(dāng)前傳進(jìn)的文件夾自帶的索引106             int intCurrentFolderIndex = 0;107             string strNewName = string.Empty;108             //原始名字109             string strOriginalName = strFolderName;110             //用來保存當(dāng)前目錄下的文件的最大索引。111             int intMaxIndex = 0;112             if (!Directory.Exists(Path.Combine(strFolderPath, strFolderName)))113             {114                 return strFolderName;115             }116             //根據(jù)傳進(jìn)來的文件名,通過正則匹配,找到文件夾是否已經(jīng)帶有索引。117             string strRegex = "(?<folderName>.+?)([((](?<folderIndex>//d+)[))])";118             Regex regex = new Regex(strRegex, RegexOptions.Singleline);119             if (regex.IsMatch(strFolderName))120             {121                 Match match = regex.Match(strFolderName);122                 string strFolderIndex = match.Groups["folderIndex"].Value;123                 if (!string.IsNullOrEmpty(strFolderIndex))124                 {125                     intCurrentFolderIndex = Convert.ToInt32(strFolderIndex);126                     strOriginalName = match.Groups["folderName"].Value;127                 }128             }129 130             string[] strFolderNames = Directory.GetDirectories(strFolderPath)131                 .Where(x => regex.IsMatch(x))132                 .Select(x => x.Split(new char[] { '//' })133                     .LastOrDefault())134                     .ToArray();135             if (strFolderNames != null && strFolderNames.Length > 0)136             {137                 foreach (string item in strFolderNames)138                 {139                     //因?yàn)楂@得的文件路徑數(shù)組中都是匹配成功的路徑,此處不再進(jìn)行判斷是否匹配140                     Match match = regex.Match(item);141                     //獲得索引142                     string strIndex = match.Groups["folderIndex"].Value;143                     //如果為空,說明只有類似 1.txt這樣的文件,則返回的文件就是1(1).txt144                     //否則找到最大索引,然后拼接最大索引加一的文件名145                     if (!string.IsNullOrEmpty(strIndex))146                     {147                         int intIndex = Convert.ToInt32(strIndex);148                         if (intMaxIndex < intIndex)149                         {150                             intMaxIndex = intIndex;151                         }152                     }153                 }154                 //如果目錄中存在的文件索引大于或者等于當(dāng)前傳進(jìn)來的文件的索引則使用新的名稱,否則將返回傳進(jìn)來的文件名稱155                 if (intMaxIndex >= intCurrentFolderIndex)156                 {157                     //循環(huán)接收,求出了最大的索引,則新文件的索引就是最大索引加一158                     StringBuilder sb = new StringBuilder();159                     sb.Append(strOriginalName);160                     sb.Append("(");161                     sb.Append((intMaxIndex + 1).ToString());162                     sb.Append(")");163                     strNewName = sb.ToString();164                 }165                 else166                 {167                     strNewName = strFolderName;168                 }169             }170             else171             {172                 //如果沒有匹配到相似的文件名結(jié)構(gòu),則說明是一個(gè)新的文件,則不做任何操作173                 strNewName = strFolderName;174             }175             return strNewName;176         }177     }178 }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 同江市| 连云港市| 呈贡县| 大庆市| 南开区| 洞头县| 敦煌市| 益阳市| 辽阳县| 漳平市| 南安市| 丹巴县| 陆河县| 海南省| 揭西县| 巴东县| 梅州市| 邓州市| 铜陵市| 郸城县| 竹溪县| 景谷| 南靖县| 什邡市| 台湾省| 南宫市| 奉化市| 元朗区| 治多县| 抚州市| 乡宁县| 福泉市| 洛宁县| 武安市| 阿坝| 乡城县| 湟中县| 房山区| 灵寿县| 乌苏市| 浠水县|