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 = -;
  41. foreach (System.IO.DirectoryInfo dir2nd in dir1st.GetDirectories()) {
  42. endIndex = dir2nd.Name.LastIndexOf("_CSharp");
  43. if (endIndex != -) {
  44. desSimName = dir2nd.Name.Substring(, 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 == )
  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 - 文件或目录位置操作.的更多相关文章

  1. Perl文件、目录常用操作

    注意,这些操作的对象是文件名(相对路径/绝对路径),而非文件/目录句柄,句柄只是perl和文件系统中文件的关联通道,而非实体对象. 创建文件 在unix类操作系统中有一个touch命令可以非常方便的创 ...

  2. 【node】fs模块,文件和目录的操作

    检查文件是否存在,查询文件信息 fs.stat() fs.stat('./server.js', function (err, stat) { if (stat && stat.isF ...

  3. 转:eclipse打开文件或者目录位置(不使用插件)

    http://my.oschina.net/havoc/blog/204958?p= 首先说不使用插件的方法 WINDOWS eclipse配置 Run-->External Tools--&g ...

  4. Java——文件及目录File操作

    API file.listFiles(); //列出目录下所有文件及子目录fileList[i].isFile() //判断是否为文件 fileList[i].isDirectory() //判断是否 ...

  5. Python之文件操作:文件、目录的操作

    一.创建 1.创建文件 open(path,'w') 2.创建目录 (1)os.mkdir(pt[, mode=0777]) 新建一个目录pt,参数mode表示生成的目录的权限,默认是超级权限,也就是 ...

  6. 12 hdfs常用文件、目录拷贝操作、删除操作

    package com.da.hbase.tool.utils; import com.da.hbase.tool.common.Const; import org.apache.hadoop.con ...

  7. Java NIO.2 —— 文件或目录拷贝操作

    拷贝整个文件树是可以递归每个目录和文件调用 Files.copy()方法.在使用的时候有一下注意事项. 在往目录拷贝文件之前,首先要保证目录已经存在.拷贝源目录(不论是否为空)都会生成目标目录.整个任 ...

  8. Java NIO.2 —— 文件或目录删除操作

    文件删除 删除单个文件的操作很简单,如果要删除一个目录树的话,需要实现FileVisitor 接口然后递归地调用delete() 或deleteIfExists()方法.在看代码之前,需要注意一下问题 ...

  9. eclipse打开文件或者目录位置

    1.点击Run-->External Tools-->External Tools Configurations... 右击program,点击new 2.填写名称,Location,Ar ...

随机推荐

  1. redis php

    redis php 学习1.连接$redis = new redis();$result = $redis->connect('127.0.0.1',6379); 2.set$redis = n ...

  2. AMH4.2 Ftp账号路径修改设置

    AMH4.2的ftp控制有点不尽如人意,每个ftp账号只能对应一个站点:如果按照面板所提供的权限,有多少个站就得设置多少个ftp账号,这一操作就会非常麻烦,造成效率低下:不过AMH5.0已经能够通过面 ...

  3. 05 - 替换vtkDataObject中的Update方法 VTK 6.0 迁移

    VTK6 引入了许多不兼容的变.其中之一是删除vtkDataObject中所有有关管道的方法.下面讨论update方法并提供迁移现有代码的建议. Update() vtkDataObject::Upd ...

  4. [翻译]只为图片使用IMG标签(Use IMG tags only for Images)

    原文地址:Use IMG tags only for Images 首先,补充一些背景知识. web开发人员经常通过在主页预加载(预缓存)将来的页面所用到的一些资源的方式来优化网站的性能.常用的手段是 ...

  5. new Date参数问题

    new Date支持的参数: MDN:   new Date();   new Date(value);   new Date(dateString);   new Date(year, month, ...

  6. spark Association failed with [akka.tcp:sparkMaster@ip:7077]

    今搭建spark集群, conf/spark-env.sh 配制如下 export SPARK_MASTER_IP=masterexport SPARK_MASTER_PORT=7077export ...

  7. MetaData元数据

    一.基础 定义:数据库.表.列相关信息的描述.    何时使用:想取得对数据库的信息时使用.    一]数据库元数据——通过DataBaseMetaData            DataBaseMe ...

  8. easyUI treeGrid 的小例子

    今天由于业务的需要,于是采用了easyui的的treeGrid控件. <table title="Folder Browser" class="easyui-tre ...

  9. Android中Intent的使用

    1./以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. //一.打开一个网页,类别是Intent.ACTION_VIEW Uri uri = Uri.parse( ...

  10. Zookeeper为什么总是奇数个

    zookeeper有这样一个特性: [集群中只要有超过过半的机器是正常工作的,那么整个集群对外就是可用的] 也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1 ...