本地复制文件或者文件夹建立副本取名功能

     本地复制文件或者文件夹建立副本取名功能,完全模仿Windows下复制文件和文件夹的功能,直接调用方法,返回复制后的新对象名称。        
     各位也需会有更好的方法,不吝赐教。
 1         /// <summary>
 2         ///  返回复制的文件或者文件夹的名称
 3         /// </summary>

 4         /// <param name="destFileName">复制的源文件的名称</param>
 5         /// <param name="isDirectory">True是目录/False是文件</param>
 6         /// <returns>新文件或者文件夹的名称</returns>
 7         internal static string GetCopyObjectName(string sourceName, bool  isDirectory)
 8 
        {
 9             try

10              {
11                 //要返回的对象名称

12                 string ReturnFileName = string .Empty;
13                 /*
根据源文件名称复制出来的已经存在的副本文件名称的序号集合 
14 
                 * eg. 源文件 :Index.html 复制后会有  Index -副本.html、Index -副本 (2).html、Index -副本 (3).html...;
15 
                 * 这里取序号 2、3填入集合
16                 */

17                 ArrayList FileName = new  ArrayList();
18                 //同级目录下所有相同类型对象的名称

19                 string[] AllObjectName =  isDirectory
20                                       ? Directory.GetDirectories(Path.GetDirectoryName(sourceName), "*", SearchOption.TopDirectoryOnly)   //目录

21                                       : Directory.GetFiles(Path.GetDirectoryName(sourceName), string.Format("*{0}", Path.GetExtension(sourceName)), SearchOption.TopDirectoryOnly); // 文件
22                 //复制源的对象名称

23                 string SourceFileName = string.Format("{0} -副本" , Path.GetFileNameWithoutExtension(sourceName));
24                 //同一目录中已经存在同种类型的对象的名称

25                 string ExistFileName = string .Empty;
26                 //遍历同种源复制出来的对角名称个数名,取其序号

27                 foreach (string var in  AllObjectName)
28 
                {
29                     //已经存在的无后缀的文件名

30                     ExistFileName =  Path.GetFileNameWithoutExtension(var);
31                     //判断是否存在源文件的副本文件,存在则把所有副本的序号填充到集合

32                     if  (ExistFileName.Contains(SourceFileName))
33 
                    {
34                         //抽取新建文件名中的序号

35                         string tmpstr = ExistFileName.Replace(SourceFileName, string.Empty).ToString().Replace("("string.Empty).Replace(")"string .Empty).Trim();
36                         if (tmpstr.Equals(string
.Empty))
37 
                        {
38                             FileName.Add(1
);
39                             continue
;
40 
                        }
41                         int
 novalue;
42                         //把序号转换成数值型

43                         if (int.TryParse(tmpstr, out  novalue))
44 
                        {
45 
                            FileName.Add(novalue);
46                             continue
;
47 
                        }
48 
                    }
49 
                }
50                 //给集合按数字序号从小到大排序

51                  FileName.Sort();
52 

53                 string uservalue = string .Empty;
54                 for (int i = 0; i < FileName.Count; i++
)
55 
                {
56                     int objectNo = i + 1//
索引处对象名称序号应该对应的序号值
57 

58                     //查找数字序列中是否不完整,
59                     if (! FileName[i].ToString().Equals(objectNo.ToString()))
60                     { //如果不存在则选择这个值

61                         uservalue = objectNo.Equals(1? string .Empty : objectNo.ToString();
62                         break
;
63 
                    }
64                     else

65                     { //如果存在,则加1后,继续循环
66                         uservalue = (objectNo + 1 ).ToString();
67                         continue
;
68 
                    }
69 
                }
70                 if (!uservalue.Equals(string.Empty)) //如果不为空给序号加上括号

71                     uservalue = "(" + uservalue + ")" ;
72                 //组合文件名称

73                 ReturnFileName = Path.Combine(Path.GetDirectoryName(sourceName), string.Format("{0} {1}" , SourceFileName, uservalue)).Trim();
74                 if (!isDirectory) //如果不是目录,加上对象的后缀名

75                     ReturnFileName +=  Path.GetExtension(sourceName);
76                 //返回文件名称

77                 return  ReturnFileName.Trim();
78 
            }
79             catch
 (Exception ex)
80 
            {
81                 throw new
 Exception(ex.Message);
82 
            }
83         }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值