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