今天对自己以前写的一些常用的组件整理了一下,发现对文件目录的操作的一个类还用的比较多,于是对他进行了修改,一些方法是为在社区中看到有网友提问增加的,包括复制目录的文件和子目录,移动目录文件和子目录,生成Xml树形文件等。
using System;
using System.IO;
using System.Xml;namespace Zhzuo
{/// <summary>/// FileDirectoryUtility 类,方法不包含异常处理/// </summary>public class FileDirectoryUtility{/// <summary>/// 路径分割符/// </summary>private const string PATH_SPLIT_CHAR = "//";/// <summary>/// 构造函数/// </summary>private FileDirectoryUtility(){}   /// <summary>/// 复制指定目录的所有文件,不包含子目录及子目录中的文件/// </summary>/// <param name="sourceDir">原始目录</param>/// <param name="targetDir">目标目录</param>/// <param name="overWrite">如果为true,表示覆盖同名文件,否则不覆盖</param>public static void CopyFiles(string sourceDir,string targetDir,bool overWrite){CopyFiles(sourceDir,targetDir,overWrite,false);}/// <summary>/// 复制指定目录的所有文件/// </summary>/// <param name="sourceDir">原始目录</param>/// <param name="targetDir">目标目录</param>/// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>/// <param name="copySubDir">如果为true,包含目录,否则不包含</param>public static void CopyFiles(string sourceDir,string targetDir,bool overWrite,bool copySubDir)          {//复制当前目录文件foreach(string sourceFileName in Directory.GetFiles(sourceDir)){string targetFileName = Path.Combine(targetDir,sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR)+ 1));if(File.Exists(targetFileName)){if(overWrite == true){File.SetAttributes(targetFileName,FileAttributes.Normal);File.Copy(sourceFileName,targetFileName,overWrite);}}else{File.Copy(sourceFileName,targetFileName,overWrite);}}            //复制子目录if(copySubDir){foreach(string sourceSubDir in Directory.GetDirectories(sourceDir)){string targetSubDir = Path.Combine(targetDir,sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) +1));if(!Directory.Exists(targetSubDir))Directory.CreateDirectory(targetSubDir);CopyFiles(sourceSubDir,targetSubDir,overWrite,true);}}}/// <summary>/// 剪切指定目录的所有文件,不包含子目录/// </summary>/// <param name="sourceDir">原始目录</param>/// <param name="targetDir">目标目录</param>/// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>public static void MoveFiles(string sourceDir,string targetDir,bool overWrite){MoveFiles(sourceDir,targetDir,overWrite,false);}/// <summary>/// 剪切指定目录的所有文件/// </summary>/// <param name="sourceDir">原始目录</param>/// <param name="targetDir">目标目录</param>/// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>/// <param name="moveSubDir">如果为true,包含目录,否则不包含</param>public static void MoveFiles(string sourceDir,string targetDir,bool overWrite,bool moveSubDir){//移动当前目录文件foreach(string sourceFileName in Directory.GetFiles(sourceDir)){string targetFileName = Path.Combine(targetDir ,sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));if(File.Exists(targetFileName)){if(overWrite == true){File.SetAttributes(targetFileName,FileAttributes.Normal);File.Delete(targetFileName);File.Move(sourceFileName,targetFileName);}}                          else{File.Move(sourceFileName,targetFileName);}}if(moveSubDir){foreach(string sourceSubDir in Directory.GetDirectories(sourceDir)){string targetSubDir = Path.Combine(targetDir ,sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));if(!Directory.Exists(targetSubDir))Directory.CreateDirectory(targetSubDir);MoveFiles(sourceSubDir,targetSubDir,overWrite,true);Directory.Delete(sourceSubDir);}}}/// <summary>/// 删除指定目录的所有文件,不包含子目录/// </summary>/// <param name="targetDir">操作目录</param>public static void DeleteFiles(string targetDir){DeleteFiles(targetDir,false);}/// <summary>/// 删除指定目录的所有文件和子目录/// </summary>/// <param name="targetDir">操作目录</param>/// <param name="delSubDir">如果为true,包含对子目录的操作</param>public static void DeleteFiles(string targetDir,bool delSubDir)              {foreach(string fileName in Directory.GetFiles(targetDir)){   File.SetAttributes(fileName,FileAttributes.Normal);File.Delete(fileName);}            if(delSubDir){DirectoryInfo dir = new DirectoryInfo(targetDir);foreach(DirectoryInfo subDi in  dir.GetDirectories()){DeleteFiles(subDi.FullName,true);subDi.Delete();}}}/// <summary>/// 创建指定目录/// </summary>/// <param name="targetDir"></param>public static void CreateDirectory(string targetDir) {DirectoryInfo dir= new DirectoryInfo(targetDir);if (!dir.Exists)dir.Create();}/// <summary>/// 建立子目录/// </summary>/// <param name="targetDir">目录路径</param>/// <param name="subDirName">子目录名称</param>public static void CreateDirectory(string parentDir,string subDirName) {CreateDirectory(parentDir + PATH_SPLIT_CHAR + subDirName);}/// <summary>/// 删除指定目录/// </summary>/// <param name="targetDir">目录路径</param>public static void DeleteDirectory(string targetDir){DirectoryInfo dirInfo = new DirectoryInfo(targetDir);if(dirInfo.Exists){DeleteFiles(targetDir,true);dirInfo.Delete(true);}}/// <summary>/// 删除指定目录的所有子目录,不包括对当前目录文件的删除/// </summary>/// <param name="targetDir">目录路径</param>public static void DeleteSubDirectory(string targetDir){foreach(string subDir in Directory.GetDirectories(targetDir)){DeleteDirectory(subDir);}}/// <summary>/// 将指定目录下的子目录和文件生成xml文档/// </summary>/// <param name="targetDir">根目录</param>/// <returns>返回XmlDocument对象</returns>public static XmlDocument CreateXml(string targetDir){XmlDocument myDocument = new XmlDocument();XmlDeclaration declaration = myDocument.CreateXmlDeclaration("1.0","utf-8",null);myDocument.AppendChild(declaration);XmlElement rootElement = myDocument.CreateElement(targetDir.Substring(targetDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));myDocument.AppendChild(rootElement);foreach(string fileName in Directory.GetFiles(targetDir)){                 XmlElement childElement = myDocument.CreateElement("File"); childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR) + 1);rootElement.AppendChild(childElement);}foreach(string directory in  Directory.GetDirectories(targetDir)){XmlElement childElement = myDocument.CreateElement("Directory");childElement.SetAttribute("Name",directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));rootElement.AppendChild(childElement);CreateBranch(directory,childElement,myDocument);}return myDocument;}/// <summary>/// 生成Xml分支/// </summary>/// <param name="targetDir">子目录</param>/// <param name="xmlNode">父目录XmlDocument</param>/// <param name="myDocument">XmlDocument对象</param>private static void CreateBranch(string targetDir,XmlElement xmlNode,XmlDocument myDocument){foreach(string fileName in Directory.GetFiles(targetDir)){   XmlElement childElement = myDocument.CreateElement("File"); childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR)+1);xmlNode.AppendChild(childElement);}foreach(string directory in  Directory.GetDirectories(targetDir)){XmlElement childElement = myDocument.CreateElement("Directory");childElement.SetAttribute("Name",directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));xmlNode.AppendChild(childElement);CreateBranch(directory,childElement,myDocument);}}       }}整个类比较简单,没有写相关的查找文件目录的方法;对异常没有处理,我认为如果有异常抛出还是在这个类外面处理更好。如果有网友使用,发现问题请联系我,或在BLOG上留言。另外,在测试这个类的时候,发现了一个Bug,不知道是 windows系统的 bug和.net framework1.1的bug。

编写一个文件目录常用操作的类相关推荐

  1. 自己编写一个读取TGA文件的类

    自己编写一个读取TGA文件的类 TGA文件,也就是Targa文件,是一种图片的格式,在游戏和绘图领域中用得比较广泛.TGA文件是位图文件,存储着各个像素的颜色信息.本来想直接使用<OpenGL超 ...

  2. Java练习题 类 编写一个程序,使用复数类Complex验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i 。

    编写一个程序,使用复数类Complex验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i . 复数类Complex必须满足如下要求: (1) 复数类Complex 的属性有: real ...

  3. 9-6 冰淇淋小店 : 冰淇淋小店是一种特殊的餐馆。 编写一个名为IceCreamStand 的类, 让它继承你为完成练习9-1或练习9-4而编写的Restaurant 类.

    9-6 冰淇淋小店 : 冰淇淋小店是一种特殊的餐馆. 编写一个名为IceCreamStand 的类, 让它继承你为完成练习9-1或练习9-4而编写的Restaurant 类. 这两个版 本的Resta ...

  4. 习题 12.5 编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Cricle,Square, Rectangle, Trapezoid ,Triangle。用虚函数分别计算图形面积。

    习题 12.5 编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Cricle,Square, Rectangle, Trapezoid ,Triangle.用虚函数分别计算图形面积,并求所 ...

  5. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )

    文章目录 一.Bitmap 内存缓存策略 二.LruCache 内存缓存 三.LruCache 常用操作 四.LruCache 工具类 五.源码及资源下载 官方参考 : Google 官方提供的 内存 ...

  6. linux实验三:基于mykernel 2.0编写一个简单的操作系统内核

    实验内容 按照https://github.com/mengning/mykernel的说明配置mykernel 2.0,熟悉Linux内核的编译:基于mykernel 2.0编写一个操作系统内核,参 ...

  7. File类之文件目录常用操作

    (1)基本概念 Java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或者目录的特征信息,如大小等. (2)常用方法 方法声明 功能介绍 File(String pathna ...

  8. php 一个简单正则表达式,PHP中正则表达式回顾(3)--编写一个简单的正则表达式工具类...

    跟着视频的讲解,也亲手敲了这么一个正则表达式的类,感觉很不错,真是温故而知新,本来想把注释写的逼格高一点的,今天晚了有点累,先简单的写一下,有时间了再完善完善. class regexTool{ // ...

  9. 文件目录的操作DirectoryInfo类

    DirectoryInfo归属于System.IO这个输入输出流命名空间,主要用来操作目录,如可以进行复制,移动,重命名,创建和删除目录,此类不可被继承. 下面我们来简单的进行目录操作吧. 首先呢,我 ...

最新文章

  1. Visual Studio 11 Beta 带来新的Metro 应用开发体验
  2. php多用户商城,php多用户商城选择开源的好
  3. matlab鬼成像,一种基于光计算的可视化计算鬼成像系统及成像方法与流程
  4. 神策数据独家丨100% 还原小仙炖 618 私域个性化服务实践
  5. Spark SQL 1.x之Hive Context
  6. 斯坦福大学机器学习第五课正则化“
  7. 基于java ssm springboot女士电商平台系统源码+文档设计
  8. 企业级WEB的负载均衡高可用之LVS+Keepalived(3)
  9. 7个免费的服务器监控工具
  10. MP4-M3U8在线P2P加速视频播放器PHP源码
  11. 关于LinkList和LNode*
  12. 前端JS计算文件MD5
  13. Linux CFS调度器之唤醒WAKE_AFFINE 机制--Linux进程的管理与调度(三十一)
  14. 服务器硬件防火墙与软件防火墙的作用和区别
  15. html是什么简答题,网页设计与制作简答题.doc
  16. java 大数加减算法
  17. mysql世界国家数据库_世界国家 的数据库sql
  18. Windows 系统自带的文件同步工具
  19. SoundPlayer 播放无声音解决方案
  20. Python-random函数用法

热门文章

  1. SQL Server - SqlLocalDB安装
  2. Java Web项目在Linux服务器自动化部署续-整合Bamboo
  3. Java垃圾回收GC概览
  4. 日报管理系统_好车日报:通用电动车无线电池管理系统;8月皮卡增长39.8%
  5. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)
  6. 计算机硬件技术基础 统计字符串strl中字符'a'的个数,汕头大学工学院830计算机基础综合历年考研真题202p.doc...
  7. java 获取date的时分秒_Java Date获取 年月日时分秒
  8. oracle成本抛转,抛砖引玉:CBO成本计算初探
  9. mysql8日志文件密码_mysql8 参考手册--mysqlbinlog-处理二进制日志文件的实用程序
  10. python写crm_Python CRM项目八