using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml; namespace FileCopy
{
/// <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);
}
}
}
}

  

C#目录文件复制、创建操作的更多相关文章

  1. Java文件复制删除操作合集

    import java.io.*; public class FileOperate { public FileOperate() { } /** * 新建目录 * @param folderPath ...

  2. 深层目录文件复制,C# 递归,录音录像图片文件过多,用于测试程序

    /// <summary> /// 录音录像图片文件过多只复制目录的前几个文件,用于测试程序 /// d:\file/images/2019-10/01/01/xxxxx.jpg(前几个文 ...

  3. VIM vim/vi的文件内、跨文件复制粘贴操作、替换操作

    https://www.cnblogs.com/shengulong/p/6702868.html vi/vim 中可以使用 :s 命令来替换字符串 1.s/vivian/sky/ 替换当前行第一个 ...

  4. vim/vi的文件内、跨文件复制粘贴操作、替换操作

    vi/vim 中可以使用 :s 命令来替换字符串 1.s/vivian/sky/ 替换当前行第一个 vivian 为 sky 2.:s/vivian/sky/g 替换当前行所有 vivian 为 sk ...

  5. C#中常用的目录|文件|路径信息操作

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月16日. 说明 .NET的类库API设计的非常优秀,再加上文档docs.com写的非常优秀,写代码给人一种十分优雅的感觉. 获得当 ...

  6. UNIX高级环境编程(5)Files And Directories - 文件相关时间,目录文件相关操作

     1 File Times 每个文件会维护三个时间字段,每个字段代表的时间都不同.如下表所示: 字段说明: st_mtim(the modification time)记录了文件内容最后一次被修改的时 ...

  7. 文件 File 常见操作 工具 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. Java实现文件复制的四种方式

    背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...

  9. Linux系统下进入目录文件需要什么权限?

    在Linux下进入目录需要什么权限? 1--让我们先来了解一下Linux下一个文件有哪些权限?(在linux下一切皆文件) 一个文件可以具有的权限有:可读.可写.可执行权限 r 可读权限---read ...

随机推荐

  1. 【技巧】DataGridView,ListView重新绑定时保持上次滚动位置

    (1)DataGridView 今天在项目时遇到一个问题,将DataTable绑定到DataGridView,其中一列为CheckBox列,当我修改该列值时,触发CellValueChanged事件. ...

  2. C# net部署图片分布式存储服务器的小案例

    如果web服务用户多了,访问多了,用户上传的图片,文件等内容放在一块,想必服务器是承受不住的,这个时候,我们就需要考虑分布式存储的方法了. 如图所示:一个web服务器拖2个图片服务器 如何做到用户上传 ...

  3. Python的数据类型总结

    原地可变类型和不可变类型 原地不可变类型又叫可哈希(hashable)类型,原地可变类型又叫不可哈希类型. 原地不可变类型: 数字类型:int, float, decimal.Decimal, fra ...

  4. 解决ubuntu侧边栏固定应用单击无反应的问题

    Linux下有些绿色软件,不需要安装就可以双击启动,但有些程序在打开后直接在 Launcher 中右键选择 Lock to Launcher ,但是,有时候单击图标后并未启动应用,下面给出解决方法. ...

  5. POJ2103 Jackpot

    Description The Great Dodgers company has recently developed a brand-new playing machine. You put a ...

  6. Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER

    Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER 在微博上看到的,读完还是有些收获的,首先是端正做research的态度. 我是从这里看到的:http://www.vjianke ...

  7. 在HTML下,如何为多个选择框提取数据并序列化

    如果同时存在选择框及下拉框,如果用JQUERY获取相关数据呢? <form id="deploy-form"> <checkbox>多选框 <sele ...

  8. 设计模式之单例(singleton)设计模式代码详解

    单例有两种:懒汉式和饿汉式 /** * 懒汉式的单例模式 * 这种单例模式如果采用到多线程调用该方法,有可能会产生多个实例,原因是: * 当线程一进入了①处,此时轮到线程二的时间片,线程二也来到①处, ...

  9. [转贴]怎样在LINQ实现 LEFT JOIN 或者RIGHT JOIN

    In this post let us see how we can handle Left Join and Right Join when using LINQ. There are no key ...

  10. Android用户界面 UI组件--TextView及其子类(五) DigitalClock,AnalogClock,RadioButton,CheckBox,ToggleButton汇总

    DigitalClock和AnalogClock两个时钟类 可以为DigitalClock设置背景图片,自定义时针,秒针,分针的样式 例子: <?xml version="1.0&qu ...