欢迎光临
我们一直在努力

编写一个文件目录常用操作的类-.NET教程,评论及其它

建站超值云服务器,限时71元/月

今天对自己以前写的一些常用的组件整理了一下,发现对文件目录的操作的一个类还用的比较多,于是对他进行了修改,一些方法是为在社区中看到有网友提问增加的,包括复制目录的文件和子目录,移动目录文件和子目录,生成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。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 编写一个文件目录常用操作的类-.NET教程,评论及其它
分享到: 更多 (0)

相关推荐

  • 暂无文章