C#常用目录文件操作类实例
本文实例讲述了C#常用目录文件操作类。分享给大家供大家参考。具体分析如下:
这个c#类封装了常用的目录操作,包括列出目录下的文件、检测目录是否存在、得到目录下的文件列表、检测目录是否为空、查找目录下的文件等等功能
usingSystem; usingSystem.Text; usingSystem.IO; namespaceDotNet.Utilities { ///<summary> ///文件操作夹 ///</summary> publicstaticclassDirFile { #region检测指定目录是否存在 ///<summary> ///检测指定目录是否存在 ///</summary> ///<paramname="directoryPath">目录的绝对路径</param> ///<returns></returns> publicstaticboolIsExistDirectory(stringdirectoryPath) { returnDirectory.Exists(directoryPath); } #endregion #region检测指定文件是否存在,如果存在返回true ///<summary> ///检测指定文件是否存在,如果存在则返回true。 ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticboolIsExistFile(stringfilePath) { returnFile.Exists(filePath); } #endregion #region获取指定目录中的文件列表 ///<summary> ///获取指定目录中所有文件列表 ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> publicstaticstring[]GetFileNames(stringdirectoryPath) { //如果目录不存在,则抛出异常 if(!IsExistDirectory(directoryPath)) { thrownewFileNotFoundException(); } //获取文件列表 returnDirectory.GetFiles(directoryPath); } #endregion #region获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法. ///<summary> ///获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法. ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> publicstaticstring[]GetDirectories(stringdirectoryPath) { try { returnDirectory.GetDirectories(directoryPath); } catch(IOExceptionex) { throwex; } } #endregion #region获取指定目录及子目录中所有文件列表 ///<summary> ///获取指定目录及子目录中所有文件列表 ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> ///<paramname="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 ///范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> ///<paramname="isSearchChild">是否搜索子目录</param> publicstaticstring[]GetFileNames(stringdirectoryPath,stringsearchPattern,boolisSearchChild) { //如果目录不存在,则抛出异常 if(!IsExistDirectory(directoryPath)) { thrownewFileNotFoundException(); } try { if(isSearchChild) { returnDirectory.GetFiles(directoryPath,searchPattern,SearchOption.AllDirectories); } else { returnDirectory.GetFiles(directoryPath,searchPattern,SearchOption.TopDirectoryOnly); } } catch(IOExceptionex) { throwex; } } #endregion #region检测指定目录是否为空 ///<summary> ///检测指定目录是否为空 ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> publicstaticboolIsEmptyDirectory(stringdirectoryPath) { try { //判断是否存在文件 string[]fileNames=GetFileNames(directoryPath); if(fileNames.Length>0) { returnfalse; } //判断是否存在文件夹 string[]directoryNames=GetDirectories(directoryPath); if(directoryNames.Length>0) { returnfalse; } returntrue; } catch { //这里记录日志 //LogHelper.WriteTraceLog(TraceLogLevel.Error,ex.Message); returntrue; } } #endregion #region检测指定目录中是否存在指定的文件 ///<summary> ///检测指定目录中是否存在指定的文件,若要搜索子目录请使用重载方法. ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> ///<paramname="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 ///范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> publicstaticboolContains(stringdirectoryPath,stringsearchPattern) { try { //获取指定的文件列表 string[]fileNames=GetFileNames(directoryPath,searchPattern,false); //判断指定文件是否存在 if(fileNames.Length==0) { returnfalse; } else { returntrue; } } catch(Exceptionex) { thrownewException(ex.Message); //LogHelper.WriteTraceLog(TraceLogLevel.Error,ex.Message); } } ///<summary> ///检测指定目录中是否存在指定的文件 ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> ///<paramname="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 ///范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> ///<paramname="isSearchChild">是否搜索子目录</param> publicstaticboolContains(stringdirectoryPath,stringsearchPattern,boolisSearchChild) { try { //获取指定的文件列表 string[]fileNames=GetFileNames(directoryPath,searchPattern,true); //判断指定文件是否存在 if(fileNames.Length==0) { returnfalse; } else { returntrue; } } catch(Exceptionex) { thrownewException(ex.Message); //LogHelper.WriteTraceLog(TraceLogLevel.Error,ex.Message); } } #endregion #region创建目录 ///<summary> ///创建目录 ///</summary> ///<paramname="dir">要创建的目录路径包括目录名</param> publicstaticvoidCreateDir(stringdir) { if(dir.Length==0)return; if(!Directory.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir)) Directory.CreateDirectory(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir); } #endregion #region删除目录 ///<summary> ///删除目录 ///</summary> ///<paramname="dir">要删除的目录路径和名称</param> publicstaticvoidDeleteDir(stringdir) { if(dir.Length==0)return; if(Directory.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir)) Directory.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir); } #endregion #region删除文件 ///<summary> ///删除文件 ///</summary> ///<paramname="file">要删除的文件路径和名称</param> publicstaticvoidDeleteFile(stringfile) { if(File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+file)) File.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+file); } #endregion #region创建文件 ///<summary> ///创建文件 ///</summary> ///<paramname="dir">带后缀的文件名</param> ///<paramname="pagestr">文件内容</param> publicstaticvoidCreateFile(stringdir,stringpagestr) { dir=dir.Replace("/","\\"); if(dir.IndexOf("\\")>-1) CreateDir(dir.Substring(0,dir.LastIndexOf("\\"))); System.IO.StreamWritersw=newSystem.IO.StreamWriter(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir,false,System.Text.Encoding.GetEncoding("GB2312")); sw.Write(pagestr); sw.Close(); } #endregion #region移动文件(剪贴--粘贴) ///<summary> ///移动文件(剪贴--粘贴) ///</summary> ///<paramname="dir1">要移动的文件的路径及全名(包括后缀)</param> ///<paramname="dir2">文件移动到新的位置,并指定新的文件名</param> publicstaticvoidMoveFile(stringdir1,stringdir2) { dir1=dir1.Replace("/","\\"); dir2=dir2.Replace("/","\\"); if(File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir1)) File.Move(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir1,System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir2); } #endregion #region复制文件 ///<summary> ///复制文件 ///</summary> ///<paramname="dir1">要复制的文件的路径已经全名(包括后缀)</param> ///<paramname="dir2">目标位置,并指定新的文件名</param> publicstaticvoidCopyFile(stringdir1,stringdir2) { dir1=dir1.Replace("/","\\"); dir2=dir2.Replace("/","\\"); if(File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir1)) { File.Copy(System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir1,System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"\\"+dir2,true); } } #endregion #region根据时间得到目录名/格式:yyyyMMdd或者HHmmssff ///<summary> ///根据时间得到目录名yyyyMMdd ///</summary> ///<returns></returns> publicstaticstringGetDateDir() { returnDateTime.Now.ToString("yyyyMMdd"); } ///<summary> ///根据时间得到文件名HHmmssff ///</summary> ///<returns></returns> publicstaticstringGetDateFile() { returnDateTime.Now.ToString("HHmmssff"); } #endregion #region复制文件夹 ///<summary> ///复制文件夹(递归) ///</summary> ///<paramname="varFromDirectory">源文件夹路径</param> ///<paramname="varToDirectory">目标文件夹路径</param> publicstaticvoidCopyFolder(stringvarFromDirectory,stringvarToDirectory) { Directory.CreateDirectory(varToDirectory); if(!Directory.Exists(varFromDirectory))return; string[]directories=Directory.GetDirectories(varFromDirectory); if(directories.Length>0) { foreach(stringdindirectories) { CopyFolder(d,varToDirectory+d.Substring(d.LastIndexOf("\\"))); } } string[]files=Directory.GetFiles(varFromDirectory); if(files.Length>0) { foreach(stringsinfiles) { File.Copy(s,varToDirectory+s.Substring(s.LastIndexOf("\\")),true); } } } #endregion #region检查文件,如果文件不存在则创建 ///<summary> ///检查文件,如果文件不存在则创建 ///</summary> ///<paramname="FilePath">路径,包括文件名</param> publicstaticvoidExistsFile(stringFilePath) { //if(!File.Exists(FilePath)) //File.Create(FilePath); //以上写法会报错,详细解释请看下文......... if(!File.Exists(FilePath)) { FileStreamfs=File.Create(FilePath); fs.Close(); } } #endregion #region删除指定文件夹对应其他文件夹里的文件 ///<summary> ///删除指定文件夹对应其他文件夹里的文件 ///</summary> ///<paramname="varFromDirectory">指定文件夹路径</param> ///<paramname="varToDirectory">对应其他文件夹路径</param> publicstaticvoidDeleteFolderFiles(stringvarFromDirectory,stringvarToDirectory) { Directory.CreateDirectory(varToDirectory); if(!Directory.Exists(varFromDirectory))return; string[]directories=Directory.GetDirectories(varFromDirectory); if(directories.Length>0) { foreach(stringdindirectories) { DeleteFolderFiles(d,varToDirectory+d.Substring(d.LastIndexOf("\\"))); } } string[]files=Directory.GetFiles(varFromDirectory); if(files.Length>0) { foreach(stringsinfiles) { File.Delete(varToDirectory+s.Substring(s.LastIndexOf("\\"))); } } } #endregion #region从文件的绝对路径中获取文件名(包含扩展名) ///<summary> ///从文件的绝对路径中获取文件名(包含扩展名) ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticstringGetFileName(stringfilePath) { //获取文件的名称 FileInfofi=newFileInfo(filePath); returnfi.Name; } #endregion ///<summary> ///复制文件参考方法,页面中引用 ///</summary> ///<paramname="cDir">新路径</param> ///<paramname="TempId">模板引擎替换编号</param> publicstaticvoidCopyFiles(stringcDir,stringTempId) { //if(Directory.Exists(Request.PhysicalApplicationPath+"\\Controls")) //{ //stringTempStr=string.Empty; //StreamWritersw; //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\Default.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\Default.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\Default.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\Column.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\Column.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\List.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\Content.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\Content.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\View.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\MoreDiss.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\MoreDiss.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\DissList.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\ShowDiss.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\ShowDiss.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\Diss.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\Review.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\Review.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\Review.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //if(File.Exists(Request.PhysicalApplicationPath+"\\Controls\\Search.aspx")) //{ //TempStr=File.ReadAllText(Request.PhysicalApplicationPath+"\\Controls\\Search.aspx"); //TempStr=TempStr.Replace("{$ChannelId$}",TempId); //sw=newStreamWriter(Request.PhysicalApplicationPath+"\\"+cDir+"\\Search.aspx",false,System.Text.Encoding.GetEncoding("GB2312")); //sw.Write(TempStr); //sw.Close(); //} //} } #region创建一个目录 ///<summary> ///创建一个目录 ///</summary> ///<paramname="directoryPath">目录的绝对路径</param> publicstaticvoidCreateDirectory(stringdirectoryPath) { //如果目录不存在则创建该目录 if(!IsExistDirectory(directoryPath)) { Directory.CreateDirectory(directoryPath); } } #endregion #region创建一个文件 ///<summary> ///创建一个文件。 ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticvoidCreateFile(stringfilePath) { try { //如果文件不存在则创建该文件 if(!IsExistFile(filePath)) { //创建一个FileInfo对象 FileInfofile=newFileInfo(filePath); //创建文件 FileStreamfs=file.Create(); //关闭文件流 fs.Close(); } } catch(Exceptionex) { //LogHelper.WriteTraceLog(TraceLogLevel.Error,ex.Message); throwex; } } ///<summary> ///创建一个文件,并将字节流写入文件。 ///</summary> ///<paramname="filePath">文件的绝对路径</param> ///<paramname="buffer">二进制流数据</param> publicstaticvoidCreateFile(stringfilePath,byte[]buffer) { try { //如果文件不存在则创建该文件 if(!IsExistFile(filePath)) { //创建一个FileInfo对象 FileInfofile=newFileInfo(filePath); //创建文件 FileStreamfs=file.Create(); //写入二进制流 fs.Write(buffer,0,buffer.Length); //关闭文件流 fs.Close(); } } catch(Exceptionex) { //LogHelper.WriteTraceLog(TraceLogLevel.Error,ex.Message); throwex; } } #endregion #region获取文本文件的行数 ///<summary> ///获取文本文件的行数 ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticintGetLineCount(stringfilePath) { //将文本文件的各行读到一个字符串数组中 string[]rows=File.ReadAllLines(filePath); //返回行数 returnrows.Length; } #endregion #region获取一个文件的长度 ///<summary> ///获取一个文件的长度,单位为Byte ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticintGetFileSize(stringfilePath) { //创建一个文件对象 FileInfofi=newFileInfo(filePath); //获取文件的大小 return(int)fi.Length; } #endregion #region获取指定目录中的子目录列表 ///<summary> ///获取指定目录及子目录中所有子目录列表 ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> ///<paramname="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 ///范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> ///<paramname="isSearchChild">是否搜索子目录</param> publicstaticstring[]GetDirectories(stringdirectoryPath,stringsearchPattern,boolisSearchChild) { try { if(isSearchChild) { returnDirectory.GetDirectories(directoryPath,searchPattern,SearchOption.AllDirectories); } else { returnDirectory.GetDirectories(directoryPath,searchPattern,SearchOption.TopDirectoryOnly); } } catch(IOExceptionex) { throwex; } } #endregion #region向文本文件写入内容 ///<summary> ///向文本文件中写入内容 ///</summary> ///<paramname="filePath">文件的绝对路径</param> ///<paramname="text">写入的内容</param> ///<paramname="encoding">编码</param> publicstaticvoidWriteText(stringfilePath,stringtext,Encodingencoding) { //向文件写入内容 File.WriteAllText(filePath,text,encoding); } #endregion #region向文本文件的尾部追加内容 ///<summary> ///向文本文件的尾部追加内容 ///</summary> ///<paramname="filePath">文件的绝对路径</param> ///<paramname="content">写入的内容</param> publicstaticvoidAppendText(stringfilePath,stringcontent) { File.AppendAllText(filePath,content); } #endregion #region将现有文件的内容复制到新文件中 ///<summary> ///将源文件的内容复制到目标文件中 ///</summary> ///<paramname="sourceFilePath">源文件的绝对路径</param> ///<paramname="destFilePath">目标文件的绝对路径</param> publicstaticvoidCopy(stringsourceFilePath,stringdestFilePath) { File.Copy(sourceFilePath,destFilePath,true); } #endregion #region将文件移动到指定目录 ///<summary> ///将文件移动到指定目录 ///</summary> ///<paramname="sourceFilePath">需要移动的源文件的绝对路径</param> ///<paramname="descDirectoryPath">移动到的目录的绝对路径</param> publicstaticvoidMove(stringsourceFilePath,stringdescDirectoryPath) { //获取源文件的名称 stringsourceFileName=GetFileName(sourceFilePath); if(IsExistDirectory(descDirectoryPath)) { //如果目标中存在同名文件,则删除 if(IsExistFile(descDirectoryPath+"\\"+sourceFileName)) { DeleteFile(descDirectoryPath+"\\"+sourceFileName); } //将文件移动到指定目录 File.Move(sourceFilePath,descDirectoryPath+"\\"+sourceFileName); } } #endregion #region从文件的绝对路径中获取文件名(不包含扩展名) ///<summary> ///从文件的绝对路径中获取文件名(不包含扩展名) ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticstringGetFileNameNoExtension(stringfilePath) { //获取文件的名称 FileInfofi=newFileInfo(filePath); returnfi.Name.Split('.')[0]; } #endregion #region从文件的绝对路径中获取扩展名 ///<summary> ///从文件的绝对路径中获取扩展名 ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticstringGetExtension(stringfilePath) { //获取文件的名称 FileInfofi=newFileInfo(filePath); returnfi.Extension; } #endregion #region清空指定目录 ///<summary> ///清空指定目录下所有文件及子目录,但该目录依然保存. ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> publicstaticvoidClearDirectory(stringdirectoryPath) { if(IsExistDirectory(directoryPath)) { //删除目录中所有的文件 string[]fileNames=GetFileNames(directoryPath); for(inti=0;i<fileNames.Length;i++) { DeleteFile(fileNames[i]); } //删除目录中所有的子目录 string[]directoryNames=GetDirectories(directoryPath); for(inti=0;i<directoryNames.Length;i++) { DeleteDirectory(directoryNames[i]); } } } #endregion #region清空文件内容 ///<summary> ///清空文件内容 ///</summary> ///<paramname="filePath">文件的绝对路径</param> publicstaticvoidClearFile(stringfilePath) { //删除文件 File.Delete(filePath); //重新创建该文件 CreateFile(filePath); } #endregion #region删除指定目录 ///<summary> ///删除指定目录及其所有子目录 ///</summary> ///<paramname="directoryPath">指定目录的绝对路径</param> publicstaticvoidDeleteDirectory(stringdirectoryPath) { if(IsExistDirectory(directoryPath)) { Directory.Delete(directoryPath,true); } } #endregion } }
希望本文所述对大家的C#程序设计有所帮助。