1 public static class FileSystemHelper
2 {
3 #region 检测指定目录是否存在
4 /// <summary>
5 /// 检测指定目录是否存在
6 /// </summary>
7 /// <param name="directoryPath">目录的绝对路径</param>
8 /// <returns></returns>
9 public static bool IsExistDirectory(string directoryPath)
10 {
11 return Directory.Exists(directoryPath);
12 }
13 #endregion
14
15 #region 检测指定文件是否存在,如果存在返回true
16 /// <summary>
17 /// 检测指定文件是否存在,如果存在则返回true。
18 /// </summary>
19 /// <param name="filePath">文件的绝对路径</param>
20 public static bool IsExistFile(string filePath)
21 {
22 return File.Exists(filePath);
23 }
24 #endregion
25
26 #region 获取指定目录中的文件列表
27 /// <summary>
28 /// 获取指定目录中所有文件列表
29 /// </summary>
30 /// <param name="directoryPath">指定目录的绝对路径</param>
31 public static string[] GetFileNames(string directoryPath)
32 {
33 //如果目录不存在,则抛出异常
34 if (!IsExistDirectory(directoryPath))
35 {
36 throw new FileNotFoundException();
37 }
38
39 //获取文件列表
40 return Directory.GetFiles(directoryPath);
41 }
42 #endregion
43
44 #region 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法.
45 /// <summary>
46 /// 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法.
47 /// </summary>
48 /// <param name="directoryPath">指定目录的绝对路径</param>
49 public static string[] GetDirectories(string directoryPath)
50 {
51 try
52 {
53 return Directory.GetDirectories(directoryPath);
54 }
55 catch (IOException ex)
56 {
57 throw ex;
58 }
59 }
60 #endregion
61
62 #region 获取指定目录及子目录中所有文件列表
63 /// <summary>
64 /// 获取指定目录及子目录中所有文件列表
65 /// </summary>
66 /// <param name="directoryPath">指定目录的绝对路径</param>
67 /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
68 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
69 /// <param name="isSearchChild">是否搜索子目录</param>
70 public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild)
71 {
72 //如果目录不存在,则抛出异常
73 if (!IsExistDirectory(directoryPath))
74 {
75 throw new FileNotFoundException();
76 }
77
78 try
79 {
80 if (isSearchChild)
81 {
82 return Directory.GetFiles(directoryPath, searchPattern, SearchOption.AllDirectories);
83 }
84 else
85 {
86 return Directory.GetFiles(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);
87 }
88 }
89 catch (IOException ex)
90 {
91 throw ex;
92 }
93 }
94 #endregion
95
96 #region 检测指定目录是否为空
97 /// <summary>
98 /// 检测指定目录是否为空
99 /// </summary>
100 /// <param name="directoryPath">指定目录的绝对路径</param>
101 public static bool IsEmptyDirectory(string directoryPath)
102 {
103 try
104 {
105 //判断是否存在文件
106 string[] fileNames = GetFileNames(directoryPath);
107 if (fileNames.Length > 0)
108 {
109 return false;
110 }
111
112 //判断是否存在文件夹
113 string[] directoryNames = GetDirectories(directoryPath);
114 if (directoryNames.Length > 0)
115 {
116 return false;
117 }
118
119 return true;
120 }
121 catch
122 {
123 //这里记录日志
124 //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
125 return true;
126 }
127 }
128 #endregion
129
130 #region 检测指定目录中是否存在指定的文件
131 /// <summary>
132 /// 检测指定目录中是否存在指定的文件,若要搜索子目录请使用重载方法.
133 /// </summary>
134 /// <param name="directoryPath">指定目录的绝对路径</param>
135 /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
136 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
137 public static bool Contains(string directoryPath, string searchPattern)
138 {
139 try
140 {
141 //获取指定的文件列表
142 string[] fileNames = GetFileNames(directoryPath, searchPattern, false);
143
144 //判断指定文件是否存在
145 if (fileNames.Length == 0)
146 {
147 return false;
148 }
149 else
150 {
151 return true;
152 }
153 }
154 catch (Exception ex)
155 {
156 throw new Exception(ex.Message);
157 //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
158 }
159 }
160
161 /// <summary>
162 /// 检测指定目录中是否存在指定的文件
163 /// </summary>
164 /// <param name="directoryPath">指定目录的绝对路径</param>
165 /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
166 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
167 /// <param name="isSearchChild">是否搜索子目录</param>
168 public static bool Contains(string directoryPath, string searchPattern, bool isSearchChild)
169 {
170 try
171 {
172 //获取指定的文件列表
173 string[] fileNames = GetFileNames(directoryPath, searchPattern, true);
174
175 //判断指定文件是否存在
176 if (fileNames.Length == 0)
177 {
178 return false;
179 }
180 else
181 {
182 return true;
183 }
184 }
185 catch (Exception ex)
186 {
187 throw new Exception(ex.Message);
188 //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
189 }
190 }
191 #endregion
192
193 #region 创建目录
194 /// <summary>
195 /// 创建目录
196 /// </summary>
197 /// <param name="dir">要创建的目录路径包括目录名</param>
198 public static void CreateDir(string dir)
199 {
200 if (dir.Length == 0) return;
201 if (!Directory.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir))
202 Directory.CreateDirectory(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir);
203 }
204 #endregion
205
206 #region 删除目录
207 /// <summary>
208 /// 删除目录
209 /// </summary>
210 /// <param name="dir">要删除的目录路径和名称</param>
211 public static void DeleteDir(string dir)
212 {
213 if (dir.Length == 0) return;
214 if (Directory.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir))
215 Directory.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir);
216 }
217 #endregion
218
219 #region 删除文件
220 /// <summary>
221 /// 删除文件
222 /// </summary>
223 /// <param name="file">要删除的文件路径和名称</param>
224 public static void DeleteFile(string file)
225 {
226 if (File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + file))
227 File.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + file);
228 }
229 #endregion
230
231 #region 创建文件
232 /// <summary>
233 /// 创建文件
234 /// </summary>
235 /// <param name="dir">带后缀的文件名</param>
236 /// <param name="pagestr">文件内容</param>
237 public static void CreateFile(string dir, string pagestr)
238 {
239 dir = dir.Replace("/", "\\");
240 if (dir.IndexOf("\\") > -1)
241 CreateDir(dir.Substring(0, dir.LastIndexOf("\\")));
242 System.IO.StreamWriter sw = new System.IO.StreamWriter(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir, false, System.Text.Encoding.GetEncoding("GB2312"));
243 sw.Write(pagestr);
244 sw.Close();
245 }
246 #endregion
247
248 #region 移动文件(剪贴--粘贴)
249 /// <summary>
250 /// 移动文件(剪贴--粘贴)
251 /// </summary>
252 /// <param name="dir1">要移动的文件的路径及全名(包括后缀)</param>
253 /// <param name="dir2">文件移动到新的位置,并指定新的文件名</param>
254 public static void MoveFile(string dir1, string dir2)
255 {
256 dir1 = dir1.Replace("/", "\\");
257 dir2 = dir2.Replace("/", "\\");
258 if (File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1))
259 File.Move(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1, System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir2);
260 }
261 #endregion
262
263 #region 复制文件
264 /// <summary>
265 /// 复制文件
266 /// </summary>
267 /// <param name="dir1">要复制的文件的路径已经全名(包括后缀)</param>
268 /// <param name="dir2">目标位置,并指定新的文件名</param>
269 public static void CopyFile(string dir1, string dir2)
270 {
271 dir1 = dir1.Replace("/", "\\");
272 dir2 = dir2.Replace("/", "\\");
273 if (File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1))
274 {
275 File.Copy(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1, System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir2, true);
276 }
277 }
278 #endregion
279
280 #region 根据时间得到目录名 / 格式:yyyyMMdd 或者 HHmmssff
281 /// <summary>
282 /// 根据时间得到目录名yyyyMMdd
283 /// </summary>
284 /// <returns></returns>
285 public static string GetDateDir()
286 {
287 return DateTime.Now.ToString("yyyyMMdd");
288 }
289 /// <summary>
290 /// 根据时间得到文件名HHmmssff
291 /// </summary>
292 /// <returns></returns>
293 public static string GetDateFile()
294 {
295 return DateTime.Now.ToString("HHmmssff");
296 }
297 #endregion
298
299 #region 复制文件夹
300 /// <summary>
301 /// 复制文件夹(递归)
302 /// </summary>
303 /// <param name="varFromDirectory">源文件夹路径</param>
304 /// <param name="varToDirectory">目标文件夹路径</param>
305 public static void CopyFolder(string varFromDirectory, string varToDirectory)
306 {
307 Directory.CreateDirectory(varToDirectory);
308
309 if (!Directory.Exists(varFromDirectory)) return;
310
311 string[] directories = Directory.GetDirectories(varFromDirectory);
312
313 if (directories.Length > 0)
314 {
315 foreach (string d in directories)
316 {
317 CopyFolder(d, varToDirectory + d.Substring(d.LastIndexOf("\\")));
318 }
319 }
320 string[] files = Directory.GetFiles(varFromDirectory);
321 if (files.Length > 0)
322 {
323 foreach (string s in files)
324 {
325 File.Copy(s, varToDirectory + s.Substring(s.LastIndexOf("\\")), true);
326 }
327 }
328 }
329 #endregion
330
331 #region 检查文件,如果文件不存在则创建
332 /// <summary>
333 /// 检查文件,如果文件不存在则创建
334 /// </summary>
335 /// <param name="FilePath">路径,包括文件名</param>
336 public static void ExistsFile(string FilePath)
337 {
338 //if(!File.Exists(FilePath))
339 //File.Create(FilePath);
340 //以上写法会报错,详细解释请看下文.........
341 if (!File.Exists(FilePath))
342 {
343 FileStream fs = File.Create(FilePath);
344 fs.Close();
345 }
346 }
347 #endregion
348
349 #region 删除指定文件夹对应其他文件夹里的文件
350 /// <summary>
351 /// 删除指定文件夹对应其他文件夹里的文件
352 /// </summary>
353 /// <param name="varFromDirectory">指定文件夹路径</param>
354 /// <param name="varToDirectory">对应其他文件夹路径</param>
355 public static void DeleteFolderFiles(string varFromDirectory, string varToDirectory)
356 {
357 Directory.CreateDirectory(varToDirectory);
358
359 if (!Directory.Exists(varFromDirectory)) return;
360
361 string[] directories = Directory.GetDirectories(varFromDirectory);
362
363 if (directories.Length > 0)
364 {
365 foreach (string d in directories)
366 {
367 DeleteFolderFiles(d, varToDirectory + d.Substring(d.LastIndexOf("\\")));
368 }
369 }
370
371
372 string[] files = Directory.GetFiles(varFromDirectory);
373
374 if (files.Length > 0)
375 {
376 foreach (string s in files)
377 {
378 File.Delete(varToDirectory + s.Substring(s.LastIndexOf("\\")));
379 }
380 }
381 }
382 #endregion
383
384 #region 从文件的绝对路径中获取文件名( 包含扩展名 )
385 /// <summary>
386 /// 从文件的绝对路径中获取文件名( 包含扩展名 )
387 /// </summary>
388 /// <param name="filePath">文件的绝对路径</param>
389 public static string GetFileName(string filePath)
390 {
391 //获取文件的名称
392 FileInfo fi = new FileInfo(filePath);
393 return fi.Name;
394 }
395 #endregion
396
397 #region 创建一个目录
398 /// <summary>
399 /// 创建一个目录
400 /// </summary>
401 /// <param name="directoryPath">目录的绝对路径</param>
402 public static void CreateDirectory(string directoryPath)
403 {
404 //如果目录不存在则创建该目录
405 if (!IsExistDirectory(directoryPath))
406 {
407 Directory.CreateDirectory(directoryPath);
408 }
409 }
410 #endregion
411
412 #region 创建一个文件
413 /// <summary>
414 /// 创建一个文件。
415 /// </summary>
416 /// <param name="filePath">文件的绝对路径</param>
417 public static void CreateFile(string filePath)
418 {
419 try
420 {
421 //如果文件不存在则创建该文件
422 if (!IsExistFile(filePath))
423 {
424 //创建一个FileInfo对象
425 FileInfo file = new FileInfo(filePath);
426
427 //创建文件
428 FileStream fs = file.Create();
429
430 //关闭文件流
431 fs.Close();
432 }
433 }
434 catch (Exception ex)
435 {
436 //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
437 throw ex;
438 }
439 }
440
441 /// <summary>
442 /// 创建一个文件,并将字节流写入文件。
443 /// </summary>
444 /// <param name="filePath">文件的绝对路径</param>
445 /// <param name="buffer">二进制流数据</param>
446 public static void CreateFile(string filePath, byte[] buffer)
447 {
448 try
449 {
450 //如果文件不存在则创建该文件
451 if (!IsExistFile(filePath))
452 {
453 //创建一个FileInfo对象
454 FileInfo file = new FileInfo(filePath);
455
456 //创建文件
457 FileStream fs = file.Create();
458
459 //写入二进制流
460 fs.Write(buffer, 0, buffer.Length);
461
462 //关闭文件流
463 fs.Close();
464 }
465 }
466 catch (Exception ex)
467 {
468 //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
469 throw ex;
470 }
471 }
472 #endregion
473
474 #region 获取文本文件的行数
475 /// <summary>
476 /// 获取文本文件的行数
477 /// </summary>
478 /// <param name="filePath">文件的绝对路径</param>
479 public static int GetLineCount(string filePath)
480 {
481 //将文本文件的各行读到一个字符串数组中
482 string[] rows = File.ReadAllLines(filePath);
483
484 //返回行数
485 return rows.Length;
486 }
487 #endregion
488
489 #region 获取一个文件的长度
490 /// <summary>
491 /// 获取一个文件的长度,单位为Byte
492 /// </summary>
493 /// <param name="filePath">文件的绝对路径</param>
494 public static int GetFileSize(string filePath)
495 {
496 //创建一个文件对象
497 FileInfo fi = new FileInfo(filePath);
498
499 //获取文件的大小
500 return (int)fi.Length;
501 }
502 #endregion
503
504 #region 获取指定目录中的子目录列表
505 /// <summary>
506 /// 获取指定目录及子目录中所有子目录列表
507 /// </summary>
508 /// <param name="directoryPath">指定目录的绝对路径</param>
509 /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
510 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
511 /// <param name="isSearchChild">是否搜索子目录</param>
512 public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)
513 {
514 try
515 {
516 if (isSearchChild)
517 {
518 return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.AllDirectories);
519 }
520 else
521 {
522 return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);
523 }
524 }
525 catch (IOException ex)
526 {
527 throw ex;
528 }
529 }
530 #endregion
531
532 #region 向文本文件写入内容
533
534 /// <summary>
535 /// 向文本文件中写入内容
536 /// </summary>
537 /// <param name="filePath">文件的绝对路径</param>
538 /// <param name="text">写入的内容</param>
539 /// <param name="encoding">编码</param>
540 public static void WriteText(string filePath, string text, Encoding encoding)
541 {
542 //向文件写入内容
543 File.WriteAllText(filePath, text, encoding);
544 }
545 #endregion
546
547 #region 向文本文件的尾部追加内容
548 /// <summary>
549 /// 向文本文件的尾部追加内容
550 /// </summary>
551 /// <param name="filePath">文件的绝对路径</param>
552 /// <param name="content">写入的内容</param>
553 public static void AppendText(string filePath, string content)
554 {
555 File.AppendAllText(filePath, content);
556 }
557 #endregion
558
559 #region 将现有文件的内容复制到新文件中
560 /// <summary>
561 /// 将源文件的内容复制到目标文件中
562 /// </summary>
563 /// <param name="sourceFilePath">源文件的绝对路径</param>
564 /// <param name="destFilePath">目标文件的绝对路径</param>
565 public static void Copy(string sourceFilePath, string destFilePath)
566 {
567 File.Copy(sourceFilePath, destFilePath, true);
568 }
569 #endregion
570
571 #region 将文件移动到指定目录
572 /// <summary>
573 /// 将文件移动到指定目录
574 /// </summary>
575 /// <param name="sourceFilePath">需要移动的源文件的绝对路径</param>
576 /// <param name="descDirectoryPath">移动到的目录的绝对路径</param>
577 public static void Move(string sourceFilePath, string descDirectoryPath)
578 {
579 //获取源文件的名称
580 string sourceFileName = GetFileName(sourceFilePath);
581
582 if (IsExistDirectory(descDirectoryPath))
583 {
584 //如果目标中存在同名文件,则删除
585 if (IsExistFile(descDirectoryPath + "\\" + sourceFileName))
586 {
587 DeleteFile(descDirectoryPath + "\\" + sourceFileName);
588 }
589 //将文件移动到指定目录
590 File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFileName);
591 }
592 }
593 #endregion
594
595
596 #region 从文件的绝对路径中获取文件名( 不包含扩展名 )
597 /// <summary>
598 /// 从文件的绝对路径中获取文件名( 不包含扩展名 )
599 /// </summary>
600 /// <param name="filePath">文件的绝对路径</param>
601 public static string GetFileNameNoExtension(string filePath)
602 {
603 //获取文件的名称
604 FileInfo fi = new FileInfo(filePath);
605 return fi.Name.Split('.')[0];
606 }
607 #endregion
608
609 #region 从文件的绝对路径中获取扩展名
610 /// <summary>
611 /// 从文件的绝对路径中获取扩展名
612 /// </summary>
613 /// <param name="filePath">文件的绝对路径</param>
614 public static string GetExtension(string filePath)
615 {
616 //获取文件的名称
617 FileInfo fi = new FileInfo(filePath);
618 return fi.Extension;
619 }
620 #endregion
621
622 #region 清空指定目录
623 /// <summary>
624 /// 清空指定目录下所有文件及子目录,但该目录依然保存.
625 /// </summary>
626 /// <param name="directoryPath">指定目录的绝对路径</param>
627 public static void ClearDirectory(string directoryPath)
628 {
629 if (IsExistDirectory(directoryPath))
630 {
631 //删除目录中所有的文件
632 string[] fileNames = GetFileNames(directoryPath);
633 for (int i = 0; i < fileNames.Length; i++)
634 {
635 DeleteFile(fileNames[i]);
636 }
637
638 //删除目录中所有的子目录
639 string[] directoryNames = GetDirectories(directoryPath);
640 for (int i = 0; i < directoryNames.Length; i++)
641 {
642 DeleteDirectory(directoryNames[i]);
643 }
644 }
645 }
646 #endregion
647
648 #region 清空文件内容
649 /// <summary>
650 /// 清空文件内容
651 /// </summary>
652 /// <param name="filePath">文件的绝对路径</param>
653 public static void ClearFile(string filePath)
654 {
655 //删除文件
656 File.Delete(filePath);
657
658 //重新创建该文件
659 CreateFile(filePath);
660 }
661 #endregion
662
663 #region 删除指定目录
664 /// <summary>
665 /// 删除指定目录及其所有子目录
666 /// </summary>
667 /// <param name="directoryPath">指定目录的绝对路径</param>
668 public static void DeleteDirectory(string directoryPath)
669 {
670 if (IsExistDirectory(directoryPath))
671 {
672 Directory.Delete(directoryPath, true);
673 }
674 }
675 #endregion
676 }