首页  ·  知识 ·  编程语言
C#文件目录常用操作的类
网友  博客园|  .NET  编辑:德仔   图片来源:网络
using System; 4 using System.IO;/div>
using System;
  4       using System.IO;
  5       using System.Xml;
  6
  7       namespace FileOperate
  8       {
  9           /// <summary>
 10           /// FileDirectoryUtility 类,方法不包含异常处理
 11           /// </summary>
 12           public class FileDirectoryUtility
 13           {
 14               /// <summary>
 15               /// 路径分割符
 16               /// </summary>
 17               private const string PATH_SPLIT_CHAR = "\\";
 18
 19               /// <summary>
 20               /// 构造函数
 21               /// </summary>
 22               private FileDirectoryUtility()
 23               {
 24               }
 25
 26               /// <summary>
 27               /// 复制指定目录的所有文件,不包含子目录及子目录中的文件
 28               /// </summary>
 29               /// <param name="sourceDir">原始目录</param>
 30               /// <param name="targetDir">目标目录</param>
 31               /// <param name="overWrite">如果为true,表示覆盖同名文件,否则不覆盖</param>
 32               public static void CopyFiles(string sourceDir, string targetDir, bool overWrite)
 33               {
 34                   CopyFiles(sourceDir, targetDir, overWrite, false);
 35               }
 36
 37               /// <summary>
 38               /// 复制指定目录的所有文件
 39               /// </summary>
 40               /// <param name="sourceDir">原始目录</param>
 41               /// <param name="targetDir">目标目录</param>
 42               /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
 43               /// <param name="copySubDir">如果为true,包含目录,否则不包含</param>
 44               public static void CopyFiles(string sourceDir, string targetDir, bool overWrite, bool copySubDir)
 45               {
 46                   //复制当前目录文件
 47                   foreach (string sourceFileName in Directory.GetFiles(sourceDir))
 48                   {
 49                       string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));
 50
 51                       if (File.Exists(targetFileName))
 52                       {
 53                           if (overWrite == true)
 54                           {
 55                               File.SetAttributes(targetFileName, FileAttributes.Normal);
 56                               File.Copy(sourceFileName, targetFileName, overWrite);
 57                           }
 58                       }
 59                       else
 60                       {
 61                           File.Copy(sourceFileName, targetFileName, overWrite);
 62                       }
 63                   }
 64                   //复制子目录
 65                   if (copySubDir)
 66                   {
 67                       foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
 68                       {
 69                           string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
 70                           if (!Directory.Exists(targetSubDir))
 71                               Directory.CreateDirectory(targetSubDir);
 72                           CopyFiles(sourceSubDir, targetSubDir, overWrite, true);
 73                       }
 74                   }
 75               }
 76
 77               /// <summary>
 78               /// 剪切指定目录的所有文件,不包含子目录
 79               /// </summary>
 80               /// <param name="sourceDir">原始目录</param>
 81               /// <param name="targetDir">目标目录</param>
 82               /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
 83               public static void MoveFiles(string sourceDir, string targetDir, bool overWrite)
 84               {
 85                   MoveFiles(sourceDir, targetDir, overWrite, false);
 86               }
 87
 88               /// <summary>
 89               /// 剪切指定目录的所有文件
 90               /// </summary>
 91               /// <param name="sourceDir">原始目录</param>
 92               /// <param name="targetDir">目标目录</param>
 93               /// <param name="overWrite">如果为true,覆盖同名文件,否则不覆盖</param>
 94               /// <param name="moveSubDir">如果为true,包含目录,否则不包含</param>
 95               public static void MoveFiles(string sourceDir, string targetDir, bool overWrite, bool moveSubDir)
 96               {
 97                   //移动当前目录文件
 98                   foreach (string sourceFileName in Directory.GetFiles(sourceDir))
 99                   {
100                       string targetFileName = Path.Combine(targetDir, sourceFileName.Substring(sourceFileName.LastIndexOf(PATH_SPLIT_CHAR) + 1));
101                       if (File.Exists(targetFileName))
102                       {
103                           if (overWrite == true)
104                           {
105                               File.SetAttributes(targetFileName, FileAttributes.Normal);
106                               File.Delete(targetFileName);
107                               File.Move(sourceFileName, targetFileName);
108                           }
109                       }
110                       else
111                       {
112                           File.Move(sourceFileName, targetFileName);
113                       }
114                   }
115                   if (moveSubDir)
116                   {
117                       foreach (string sourceSubDir in Directory.GetDirectories(sourceDir))
118                       {
119                           string targetSubDir = Path.Combine(targetDir, sourceSubDir.Substring(sourceSubDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
120                           if (!Directory.Exists(targetSubDir))
121                               Directory.CreateDirectory(targetSubDir);
122                           MoveFiles(sourceSubDir, targetSubDir, overWrite, true);
123                           Directory.Delete(sourceSubDir);
124                       }
125                   }
126               }
127
128               /// <summary>
129               /// 删除指定目录的所有文件,不包含子目录
130               /// </summary>
131               /// <param name="targetDir">操作目录</param>
132               public static void DeleteFiles(string targetDir)
133               {
134                   DeleteFiles(targetDir, false);
135               }
136
137               /// <summary>
138               /// 删除指定目录的所有文件和子目录
139               /// </summary>
140               /// <param name="targetDir">操作目录</param>
141               /// <param name="delSubDir">如果为true,包含对子目录的操作</param>
142               public static void DeleteFiles(string targetDir, bool delSubDir)
143               {
144                   foreach (string fileName in Directory.GetFiles(targetDir))
145                   {
146                       File.SetAttributes(fileName, FileAttributes.Normal);
147                       File.Delete(fileName);
148                   }
149                   if (delSubDir)
150                   {
151                       DirectoryInfo dir = new DirectoryInfo(targetDir);
152                       foreach (DirectoryInfo subDi in dir.GetDirectories())
153                       {
154                           DeleteFiles(subDi.FullName, true);
155                           subDi.Delete();
156                       }
157                   }
158               }
159
160               /// <summary>
161               /// 创建指定目录
162               /// </summary>
163               /// <param name="targetDir"></param>
164               public static void CreateDirectory(string targetDir)
165               {
166                   DirectoryInfo dir = new DirectoryInfo(targetDir);
167                   if (!dir.Exists)
168                       dir.Create();
169               }
170
171               /// <summary>
172               /// 建立子目录
173               /// </summary>
174               /// <param name="targetDir">目录路径</param>
175               /// <param name="subDirName">子目录名称</param>
176               public static void CreateDirectory(string parentDir, string subDirName)
177               {
178                   CreateDirectory(parentDir + PATH_SPLIT_CHAR + subDirName);
179               }
180
181               /// <summary>
182               /// 删除指定目录
183               /// </summary>
184               /// <param name="targetDir">目录路径</param>
185               public static void DeleteDirectory(string targetDir)
186               {
187                   DirectoryInfo dirInfo = new DirectoryInfo(targetDir);
188                   if (dirInfo.Exists)
189                   {
190                       DeleteFiles(targetDir, true);
191                       dirInfo.Delete(true);
192                   }
193               }
194
195               /// <summary>
196               /// 删除指定目录的所有子目录,不包括对当前目录文件的删除
197               /// </summary>
198               /// <param name="targetDir">目录路径</param>
199               public static void DeleteSubDirectory(string targetDir)
200               {
201                   foreach (string subDir in Directory.GetDirectories(targetDir))
202                   {
203                       DeleteDirectory(subDir);
204                   }
205               }
206
207               /// <summary>
208               /// 将指定目录下的子目录和文件生成xml文档
209               /// </summary>
210               /// <param name="targetDir">根目录</param>
211               /// <returns>返回XmlDocument对象</returns>
212               public static XmlDocument CreateXml(string targetDir)
213               {
214                   XmlDocument myDocument = new XmlDocument();
215                   XmlDeclaration declaration = myDocument.CreateXmlDeclaration("1.0", "utf-8", null);
216                   myDocument.AppendChild(declaration);
217                   XmlElement rootElement = myDocument.CreateElement(targetDir.Substring(targetDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
218                   myDocument.AppendChild(rootElement);
219                   foreach (string fileName in Directory.GetFiles(targetDir))
220                   {
221                       XmlElement childElement = myDocument.CreateElement("File");
222                       childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR) + 1);
223                       rootElement.AppendChild(childElement);
224                   }
225                   foreach (string directory in Directory.GetDirectories(targetDir))
226                   {
227                       XmlElement childElement = myDocument.CreateElement("Directory");
228                       childElement.SetAttribute("Name", directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));
229                       rootElement.AppendChild(childElement);
230                       CreateBranch(directory, childElement, myDocument);
231                   }
232                   return myDocument;
233               }
234
235               /// <summary>
236               /// 生成Xml分支
237               /// </summary>
238               /// <param name="targetDir">子目录</param>
239               /// <param name="xmlNode">父目录XmlDocument</param>
240               /// <param name="myDocument">XmlDocument对象</param>
241               private static void CreateBranch(string targetDir, XmlElement xmlNode, XmlDocument myDocument)
242               {
243                   foreach (string fileName in Directory.GetFiles(targetDir))
244                   {
245                       XmlElement childElement = myDocument.CreateElement("File");
246                       childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR) + 1);
247                       xmlNode.AppendChild(childElement);
248                   }
249                   foreach (string directory in Directory.GetDirectories(targetDir))
250                   {
251                       XmlElement childElement = myDocument.CreateElement("Directory");
252                       childElement.SetAttribute("Name", directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));
253                       xmlNode.AppendChild(childElement);
254                       CreateBranch(directory, childElement, myDocument);
255                   }
256               }
257           }
258       }
259
260
本文作者:网友 来源:博客园|
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的