** 编写一个文件目录常用操作的类 **
郑佐 2005-3-8
今天对自己以前写的一些常用的组件整理了一下,发现对文件目录的操作的一个类还用的比较多,于是对他进行了修改,一些方法是为在社区中看到有网友提问增加的,包括复制目录的文件和子目录,移动目录文件和子目录,生成 Xml 树形文件等。
using System;
using System.IO;
using System.Xml;
namespace Zhzuo
{
///
1<summary>
2
3/// FileDirectoryUtility 类 , 方法不包含异常处理
4
5/// </summary>
public class FileDirectoryUtility
{
///
1<summary>
2
3/// 路径分割符
4
5/// </summary>
private const string PATH_SPLIT_CHAR = "\";
///
1<summary>
2
3/// 构造函数
4
5/// </summary>
private FileDirectoryUtility()
{
}
///
1<summary>
2
3/// 复制指定目录的所有文件 , 不包含子目录及子目录中的文件
4
5/// </summary>
///
1<param name="sourceDir"/>
原始目录
///
1<param name="targetDir"/>
目标目录
///
1<param name="overWrite"/>
如果为 true, 表示覆盖同名文件 , 否则不覆盖
public static void CopyFiles( string sourceDir, string targetDir, bool overWrite)
{
CopyFiles(sourceDir,targetDir,overWrite, false );
}
///
1<summary>
2
3/// 复制指定目录的所有文件
4
5/// </summary>
///
1<param name="sourceDir"/>
原始目录
///
1<param name="targetDir"/>
目标目录
///
1<param name="overWrite"/>
如果为 true, 覆盖同名文件 , 否则不覆盖
///
1<param name="copySubDir"/>
如果为 true, 包含目录 , 否则不包含
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 );
}
}
}
///
1<summary>
2
3/// 剪切指定目录的所有文件 , 不包含子目录
4
5/// </summary>
///
1<param name="sourceDir"/>
原始目录
///
1<param name="targetDir"/>
目标目录
///
1<param name="overWrite"/>
如果为 true, 覆盖同名文件 , 否则不覆盖
public static void MoveFiles( string sourceDir, string targetDir, bool overWrite)
{
MoveFiles(sourceDir,targetDir,overWrite, false );
}
///
1<summary>
2
3/// 剪切指定目录的所有文件
4
5/// </summary>
///
1<param name="sourceDir"/>
原始目录
///
1<param name="targetDir"/>
目标目录
///
1<param name="overWrite"/>
如果为 true, 覆盖同名文件 , 否则不覆盖
///
1<param name="moveSubDir"/>
如果为 true, 包含目录 , 否则不包含
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);
}
}
}
///
1<summary>
2
3<p class="MsoNorm</summary>