码迷,mamicode.com
首页 > 其他好文 > 详细

FileDirLocationOperator - 文件或目录位置操作.

时间:2014-10-18 00:34:03      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   io   os   ar   for   sp   

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 namespace MoveFiles.code {
  7     //文件或目录的 FullName 或 Name.
  8     public enum FileOrDirectoryNameType { FULLNAME, SIMNAME }
  9     //文件/目录 的匹配方式.
 10     public enum MatchPattern { STARTWITH, ENDWITH, EQUALS, CONTAINS }
 11 
 12     class FileDirLocationOperator {
 13 
 14         //默认处理的是 路径或文件名.
 15         public FileOrDirectoryNameType FileOrDirType = FileOrDirectoryNameType.SIMNAME;
 16         //默认 文件/目录名包含指定模式的字符串时,处理.
 17         public static MatchPattern OpePattern = MatchPattern.EQUALS;
 18 
 19         public string Root { private set; get; }
 20 
 21         /// <summary>
 22         /// 构造函数(初始化存储文件系统操作对象集合).
 23         /// </summary>
 24         /// <param name="root"></param>
 25         /// <param name="FileOrDirType"></param>
 26         /// <param name="OpePattern"></param>
 27         /// <param name="OpeType"></param>
 28         public FileDirLocationOperator(string root, FileOrDirectoryNameType FileOrDirType = FileOrDirectoryNameType.SIMNAME, MatchPattern OpePattern = MatchPattern.EQUALS) {
 29             if (String.IsNullOrEmpty(root)) throw new ArgumentNullException(root);
 30             Root = root;
 31         }
 32 
 33         public void RenameDirBySubDir() {
 34             string desFullName = "";
 35             System.IO.DirectoryInfo desDir = null;
 36             //第一层目录.
 37             foreach (System.IO.DirectoryInfo dir1st in new System.IO.DirectoryInfo(Root).GetDirectories()) {
 38                 //第二层目录.
 39                 string desSimName = "";
 40                 int endIndex = -1;
 41                 foreach (System.IO.DirectoryInfo dir2nd in dir1st.GetDirectories()) {
 42                     endIndex = dir2nd.Name.LastIndexOf("_CSharp");
 43                     if (endIndex != -1) {
 44                         desSimName = dir2nd.Name.Substring(0, endIndex);
 45                         break;
 46                     }
 47                 }   //foreach:dir2nd
 48 
 49                 if (string.IsNullOrEmpty(desSimName)) continue;
 50                 desFullName = Root + "\\" + desSimName;
 51                 desDir = new System.IO.DirectoryInfo(desFullName);
 52                 if (!desDir.Exists) {
 53                     desDir.Create();
 54                     dir1st.MoveTo(desDir.FullName);
 55                 }
 56             }   //foreach:dir1st
 57         }
 58 
 59         /// <summary>
 60         /// 将指定目录下的所有文件和目录都移到上一目录,并删除被移空的当前指定的目录.
 61         /// </summary>
 62         /// <param name="dir">指定的目录.</param>
 63         public void SubFileSysToParent(System.IO.DirectoryInfo dir) {
 64             foreach (System.IO.FileSystemInfo sub in dir.GetFileSystemInfos()) {
 65                 Move(sub, dir.Parent.FullName + "\\" + sub.Name);
 66             }
 67             //删除已被移空的目录.
 68             if (dir.GetFileSystemInfos().Length == 0)
 69                 dir.Delete();
 70         }
 71 
 72         /// <summary>
 73         /// 按文件的名称在当前目录创建对应的目录,并将文件移进去.例如,在当前目录中有个文件为"fileName.txt",
 74         /// 则在当前目录下创建目录"fileName",并将"fileName.txt"移进"fileName"中.
 75         /// </summary>
 76         /// <param name="filter">文件的后缀名.</param>
 77         public void MoveFilesByRandomCreateDir(string filter) {
 78             string desFullName = "";    //目标文件的名称.
 79             System.IO.DirectoryInfo dirDes = null;
 80             foreach (System.IO.FileInfo fInfo in new System.IO.DirectoryInfo(Root).GetFiles(filter)) {
 81                 desFullName = string.Concat(fInfo.DirectoryName, "\\", System.IO.Path.GetFileNameWithoutExtension(fInfo.Name));
 82                 dirDes = new System.IO.DirectoryInfo(desFullName);
 83                 //对于不存在的目录,需要创建.
 84                 if (!dirDes.Exists) {
 85                     dirDes.Create();
 86                 }
 87                 fInfo.MoveTo(string.Concat(dirDes.FullName, "\\", fInfo.Name));
 88             }
 89         }
 90 
 91         /// <summary>
 92         /// 判断是否匹配.
 93         /// </summary>
 94         /// <param name="dirOrFileName">源文件或目录名.</param>
 95         /// <param name="namePattern">待匹配的字符串.</param>
 96         /// <param name="ignoreCase">是否忽略大小写.</param>
 97         /// <returns></returns>
 98         public static bool Match(string dirOrFileName, string namePattern, bool ignoreCase) {
 99             switch (OpePattern) {
100                 case MatchPattern.CONTAINS:
101                     return dirOrFileName.Contains(namePattern);
102                 case MatchPattern.EQUALS:
103                     if (ignoreCase)
104                         return dirOrFileName.Equals(namePattern, StringComparison.CurrentCultureIgnoreCase);
105                     else
106                         return dirOrFileName.Equals(namePattern, StringComparison.CurrentCulture);
107                 case MatchPattern.STARTWITH:
108                     return dirOrFileName.StartsWith(namePattern);
109                 case MatchPattern.ENDWITH:
110                     return dirOrFileName.EndsWith(namePattern);
111                 default:
112                     throw new ArgumentNullException("MatchPattern:OperationPattern");
113             }
114         }
115 
116         /// <summary>
117         /// 移动文件或目录.
118         /// </summary>
119         /// <param name="fSysSrc">源文件或目录.</param>
120         /// <param name="desDirName">目标文件或目录名.</param>
121         private void Move(System.IO.FileSystemInfo fSysSrc, string desDirName) {
122             //文件.
123             if (fSysSrc is System.IO.FileInfo) {
124                 System.IO.FileInfo f = (System.IO.FileInfo)fSysSrc;
125                 f.MoveTo(desDirName);
126             }
127             //目录.
128             else if (fSysSrc is System.IO.DirectoryInfo) {
129                 System.IO.DirectoryInfo d = (System.IO.DirectoryInfo)fSysSrc;
130                 d.MoveTo(desDirName);
131             }
132             else throw new ArgumentNullException(fSysSrc.FullName);
133         }
134     }
135 }

 

FileDirLocationOperator - 文件或目录位置操作.

标签:des   style   blog   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/listened/p/4032289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!