using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace MoveFiles.code {
//文件或目录的 FullName 或 Name.
public enum FileOrDirectoryNameType { FULLNAME, SIMNAME }
//文件/目录 的匹配方式.
public enum MatchPattern { STARTWITH, ENDWITH, EQUALS, CONTAINS } class FileDirLocationOperator { //默认处理的是 路径或文件名.
public FileOrDirectoryNameType FileOrDirType = FileOrDirectoryNameType.SIMNAME;
//默认 文件/目录名包含指定模式的字符串时,处理.
public static MatchPattern OpePattern = MatchPattern.EQUALS; public string Root { private set; get; } /// <summary>
/// 构造函数(初始化存储文件系统操作对象集合).
/// </summary>
/// <param name="root"></param>
/// <param name="FileOrDirType"></param>
/// <param name="OpePattern"></param>
/// <param name="OpeType"></param>
public FileDirLocationOperator(string root, FileOrDirectoryNameType FileOrDirType = FileOrDirectoryNameType.SIMNAME, MatchPattern OpePattern = MatchPattern.EQUALS) {
if (String.IsNullOrEmpty(root)) throw new ArgumentNullException(root);
Root = root;
} public void RenameDirBySubDir() {
string desFullName = "";
System.IO.DirectoryInfo desDir = null;
//第一层目录.
foreach (System.IO.DirectoryInfo dir1st in new System.IO.DirectoryInfo(Root).GetDirectories()) {
//第二层目录.
string desSimName = "";
int endIndex = -;
foreach (System.IO.DirectoryInfo dir2nd in dir1st.GetDirectories()) {
endIndex = dir2nd.Name.LastIndexOf("_CSharp");
if (endIndex != -) {
desSimName = dir2nd.Name.Substring(, endIndex);
break;
}
} //foreach:dir2nd if (string.IsNullOrEmpty(desSimName)) continue;
desFullName = Root + "\\" + desSimName;
desDir = new System.IO.DirectoryInfo(desFullName);
if (!desDir.Exists) {
desDir.Create();
dir1st.MoveTo(desDir.FullName);
}
} //foreach:dir1st
} /// <summary>
/// 将指定目录下的所有文件和目录都移到上一目录,并删除被移空的当前指定的目录.
/// </summary>
/// <param name="dir">指定的目录.</param>
public void SubFileSysToParent(System.IO.DirectoryInfo dir) {
foreach (System.IO.FileSystemInfo sub in dir.GetFileSystemInfos()) {
Move(sub, dir.Parent.FullName + "\\" + sub.Name);
}
//删除已被移空的目录.
if (dir.GetFileSystemInfos().Length == )
dir.Delete();
} /// <summary>
/// 按文件的名称在当前目录创建对应的目录,并将文件移进去.例如,在当前目录中有个文件为"fileName.txt",
/// 则在当前目录下创建目录"fileName",并将"fileName.txt"移进"fileName"中.
/// </summary>
/// <param name="filter">文件的后缀名.</param>
public void MoveFilesByRandomCreateDir(string filter) {
string desFullName = ""; //目标文件的名称.
System.IO.DirectoryInfo dirDes = null;
foreach (System.IO.FileInfo fInfo in new System.IO.DirectoryInfo(Root).GetFiles(filter)) {
desFullName = string.Concat(fInfo.DirectoryName, "\\", System.IO.Path.GetFileNameWithoutExtension(fInfo.Name));
dirDes = new System.IO.DirectoryInfo(desFullName);
//对于不存在的目录,需要创建.
if (!dirDes.Exists) {
dirDes.Create();
}
fInfo.MoveTo(string.Concat(dirDes.FullName, "\\", fInfo.Name));
}
} /// <summary>
/// 判断是否匹配.
/// </summary>
/// <param name="dirOrFileName">源文件或目录名.</param>
/// <param name="namePattern">待匹配的字符串.</param>
/// <param name="ignoreCase">是否忽略大小写.</param>
/// <returns></returns>
public static bool Match(string dirOrFileName, string namePattern, bool ignoreCase) {
switch (OpePattern) {
case MatchPattern.CONTAINS:
return dirOrFileName.Contains(namePattern);
case MatchPattern.EQUALS:
if (ignoreCase)
return dirOrFileName.Equals(namePattern, StringComparison.CurrentCultureIgnoreCase);
else
return dirOrFileName.Equals(namePattern, StringComparison.CurrentCulture);
case MatchPattern.STARTWITH:
return dirOrFileName.StartsWith(namePattern);
case MatchPattern.ENDWITH:
return dirOrFileName.EndsWith(namePattern);
default:
throw new ArgumentNullException("MatchPattern:OperationPattern");
}
} /// <summary>
/// 移动文件或目录.
/// </summary>
/// <param name="fSysSrc">源文件或目录.</param>
/// <param name="desDirName">目标文件或目录名.</param>
private void Move(System.IO.FileSystemInfo fSysSrc, string desDirName) {
//文件.
if (fSysSrc is System.IO.FileInfo) {
System.IO.FileInfo f = (System.IO.FileInfo)fSysSrc;
f.MoveTo(desDirName);
}
//目录.
else if (fSysSrc is System.IO.DirectoryInfo) {
System.IO.DirectoryInfo d = (System.IO.DirectoryInfo)fSysSrc;
d.MoveTo(desDirName);
}
else throw new ArgumentNullException(fSysSrc.FullName);
}
}
}

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. MySQL重构查询的方式

    在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的结果--而不一定总要从MySQL获取一模一样的结果集.有时候可以查询转换一种写法让其返回一样的结果,但是性能更好.但也可以通过修改应用代 ...

  2. C# 缩略图算法

    代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. using (var stream = new FileStream(physicalPath, F ...

  3. js限制textarea文本框的文字个数

    现在发微博,那个文本框一般只能输入200字好像,再多就会自动删除,要么是提示字数受限,用Js就可实现本功能.今天带来的这个Js限制表单文本 框文字数量的例子,相信有此方面需要的是个不错的参考.为了便于 ...

  4. [资料] Apache2 的 httpd.conf 经典中文翻译

    [i=s] 本帖最后由 www.PHP888.com 于 2009-5-22 13:40 编辑 [/i] # 基于 NCSA 服务的配置文件. # #这是Apache服务器主要配置文件. #它包含服务 ...

  5. JS--图片轮播效果

    搞了很长时间才弄清楚图片轮播效果的原理,理解各个事件发生的原因,浪费了这么长的时间,只怪自己的知识太过于薄弱.现将代码写下,供大家参看,如有不妥之处还望指出,大家一起学习. 功能: 1.点击左右两边的 ...

  6. 无递归 A星寻路算法

    整理硬盘的时候,发现我早些年写的A星寻路算法.特放上来,待有缘人拿去,无递归噢,性能那是杠杠的. 码上伺候 public class Node { public int X { get; set; } ...

  7. 转:pthread_create()

    http://blog.csdn.net/youbang321/article/details/7815707 原型:int  pthread_create((pthread_t  *thread,  ...

  8. 转:Visual C++ sprintf()函数用法

    将字串格式化命令.sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访 问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情 ...

  9. Git Bash下实现复制粘贴等快速编辑功能

    在windows下使用Git Bash会经常用到选中.复制.粘贴等功能,但是一般用的方法会很复杂,笔者经过查阅一些资料,特整理一些常见编辑功能的实现方法. (1)默认方法: 单击左上角的logo ic ...

  10. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAApcAAAB3CAIAAADZ1fxtAAAbFElEQVR4nO2dzbHDOo6FHY9S0WqqZt