asp.net文件操作类
001 | /** |
002 | 文件操作类 |
003 | **/ |
004 | #region 引用命名空间 |
005 | using System; |
006 | using System.Collections.Generic; |
007 | using System.Text; |
008 | using System.IO; |
009 | #endregion |
010 | namespace CommonUtilities |
011 | { |
012 | /// <summary> |
013 | /// 文件操作类 |
014 | /// </summary> |
015 | public class FileHelper |
016 | { |
017 | #region 检测指定目录是否存在 |
018 | /// <summary> |
019 | /// 检测指定目录是否存在 |
020 | /// </summary> |
021 | /// <param name="directoryPath">目录的绝对路径</param> |
022 | public static bool IsExistDirectory( string directoryPath ) |
023 | { |
024 | return Directory.Exists( directoryPath ); |
025 | } |
026 | #endregion |
027 | #region 检测指定文件是否存在 |
028 | /// <summary> |
029 | /// 检测指定文件是否存在,如果存在则返回true。 |
030 | /// </summary> |
031 | /// <param name="filePath">文件的绝对路径</param> |
032 | public static bool IsExistFile( string filePath ) |
033 | { |
034 | return File.Exists( filePath ); |
035 | } |
036 | #endregion |
037 | #region 检测指定目录是否为空 |
038 | /// <summary> |
039 | /// 检测指定目录是否为空 |
040 | /// </summary> |
041 | /// <param name="directoryPath">指定目录的绝对路径</param> |
042 | public static bool IsEmptyDirectory( string directoryPath ) |
043 | { |
044 | try |
045 | { |
046 | //判断是否存在文件 |
047 | string [] fileNames = GetFileNames( directoryPath ); |
048 | if ( fileNames.Length > 0 ) |
049 | { |
050 | return false ; |
051 | } |
052 | //判断是否存在文件夹 |
053 | string [] directoryNames = GetDirectories( directoryPath ); |
054 | if ( directoryNames.Length > 0 ) |
055 | { |
056 | return false ; |
057 | } |
058 | return true ; |
059 | } |
060 | catch ( Exception ex ) |
061 | { |
062 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
063 | return true ; |
064 | } |
065 | } |
066 | #endregion |
067 | #region 检测指定目录中是否存在指定的文件 |
068 | /// <summary> |
069 | /// 检测指定目录中是否存在指定的文件,若要搜索子目录请使用重载方法. |
070 | /// </summary> |
071 | /// <param name="directoryPath">指定目录的绝对路径</param> |
072 | /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 |
073 | /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> |
074 | public static bool Contains( string directoryPath, string searchPattern ) |
075 | { |
076 | try |
077 | { |
078 | //获取指定的文件列表 |
079 | string [] fileNames = GetFileNames( directoryPath, searchPattern, false ); |
080 | //判断指定文件是否存在 |
081 | if ( fileNames.Length == 0 ) |
082 | { |
083 | return false ; |
084 | } |
085 | else |
086 | { |
087 | return true ; |
088 | } |
089 | } |
090 | catch ( Exception ex ) |
091 | { |
092 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
093 | return false ; |
094 | } |
095 | } |
096 | /// <summary> |
097 | /// 检测指定目录中是否存在指定的文件 |
098 | /// </summary> |
099 | /// <param name="directoryPath">指定目录的绝对路径</param> |
100 | /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 |
101 | /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> |
102 | /// <param name="isSearchChild">是否搜索子目录</param> |
103 | public static bool Contains( string directoryPath, string searchPattern, bool isSearchChild ) |
104 | { |
105 | try |
106 | { |
107 | //获取指定的文件列表 |
108 | string [] fileNames = GetFileNames( directoryPath, searchPattern, true ); |
109 | //判断指定文件是否存在 |
110 | if ( fileNames.Length == 0 ) |
111 | { |
112 | return false ; |
113 | } |
114 | else |
115 | { |
116 | return true ; |
117 | } |
118 | } |
119 | catch ( Exception ex ) |
120 | { |
121 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
122 | return false ; |
123 | } |
124 | } |
125 | #endregion |
126 | #region 创建一个目录 |
127 | /// <summary> |
128 | /// 创建一个目录 |
129 | /// </summary> |
130 | /// <param name="directoryPath">目录的绝对路径</param> |
131 | public static void CreateDirectory( string directoryPath ) |
132 | { |
133 | //如果目录不存在则创建该目录 |
134 | if ( !IsExistDirectory( directoryPath ) ) |
135 | { |
136 | Directory.CreateDirectory( directoryPath ); |
137 | } |
138 | } |
139 | #endregion |
140 | #region 创建一个文件 |
141 | /// <summary> |
142 | /// 创建一个文件。 |
143 | /// </summary> |
144 | /// <param name="filePath">文件的绝对路径</param> |
145 | public static void CreateFile( string filePath ) |
146 | { |
147 | try |
148 | { |
149 | //如果文件不存在则创建该文件 |
150 | if ( !IsExistFile( filePath ) ) |
151 | { |
152 | //创建一个FileInfo对象 |
153 | FileInfo file = new FileInfo( filePath ); |
154 | //创建文件 |
155 | FileStream fs = file.Create(); |
156 | //关闭文件流 |
157 | fs.Close(); |
158 | } |
159 | } |
160 | catch ( Exception ex ) |
161 | { |
162 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
163 | throw ex; |
164 | } |
165 | } |
166 | /// <summary> |
167 | /// 创建一个文件,并将字节流写入文件。 |
168 | /// </summary> |
169 | /// <param name="filePath">文件的绝对路径</param> |
170 | /// <param name="buffer">二进制流数据</param> |
171 | public static void CreateFile( string filePath, byte [] buffer ) |
172 | { |
173 | try |
174 | { |
175 | //如果文件不存在则创建该文件 |
176 | if ( !IsExistFile( filePath ) ) |
177 | { |
178 | //创建一个FileInfo对象 |
179 | FileInfo file = new FileInfo( filePath ); |
180 | //创建文件 |
181 | FileStream fs = file.Create(); |
182 | //写入二进制流 |
183 | fs.Write( buffer, 0, buffer.Length ); |
184 | //关闭文件流 |
185 | fs.Close(); |
186 | } |
187 | } |
188 | catch ( Exception ex ) |
189 | { |
190 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
191 | throw ex; |
192 | } |
193 | } |
194 | #endregion |
195 | #region 获取文本文件的行数 |
196 | /// <summary> |
197 | /// 获取文本文件的行数 |
198 | /// </summary> |
199 | /// <param name="filePath">文件的绝对路径</param> |
200 | public static int GetLineCount( string filePath ) |
201 | { |
202 | //将文本文件的各行读到一个字符串数组中 |
203 | string [] rows = File.ReadAllLines( filePath ); |
204 | //返回行数 |
205 | return rows.Length; |
206 | } |
207 | #endregion |
208 | #region 获取一个文件的长度 |
209 | /// <summary> |
210 | /// 获取一个文件的长度,单位为Byte |
211 | /// </summary> |
212 | /// <param name="filePath">文件的绝对路径</param> |
213 | public static int GetFileSize( string filePath ) |
214 | { |
215 | //创建一个文件对象 |
216 | FileInfo fi = new FileInfo( filePath ); |
217 | //获取文件的大小 |
218 | return ( int )fi.Length; |
219 | } |
220 | /// <summary> |
221 | /// 获取一个文件的长度,单位为KB |
222 | /// </summary> |
223 | /// <param name="filePath">文件的路径</param> |
224 | public static double GetFileSizeByKB( string filePath ) |
225 | { |
226 | //创建一个文件对象 |
227 | FileInfo fi = new FileInfo( filePath ); |
228 | //获取文件的大小 |
229 | return ConvertHelper.ToDouble( ConvertHelper.ToDouble( fi.Length ) / 1024 , 1 ); |
230 | } |
231 | /// <summary> |
232 | /// 获取一个文件的长度,单位为MB |
233 | /// </summary> |
234 | /// <param name="filePath">文件的路径</param> |
235 | public static double GetFileSizeByMB( string filePath ) |
236 | { |
237 | //创建一个文件对象 |
238 | FileInfo fi = new FileInfo( filePath ); |
239 | //获取文件的大小 |
240 | return ConvertHelper.ToDouble( ConvertHelper.ToDouble( fi.Length ) / 1024 / 1024 , 1 ); |
241 | } |
242 | #endregion |
243 | #region 获取指定目录中的文件列表 |
244 | /// <summary> |
245 | /// 获取指定目录中所有文件列表 |
246 | /// </summary> |
247 | /// <param name="directoryPath">指定目录的绝对路径</param> |
248 | public static string [] GetFileNames( string directoryPath ) |
249 | { |
250 | //如果目录不存在,则抛出异常 |
251 | if ( !IsExistDirectory( directoryPath ) ) |
252 | { |
253 | throw new FileNotFoundException(); |
254 | } |
255 | //获取文件列表 |
256 | return Directory.GetFiles( directoryPath ); |
257 | } |
258 | /// <summary> |
259 | /// 获取指定目录及子目录中所有文件列表 |
260 | /// </summary> |
261 | /// <param name="directoryPath">指定目录的绝对路径</param> |
262 | /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 |
263 | /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> |
264 | /// <param name="isSearchChild">是否搜索子目录</param> |
265 | public static string [] GetFileNames( string directoryPath, string searchPattern, bool isSearchChild ) |
266 | { |
267 | //如果目录不存在,则抛出异常 |
268 | if ( !IsExistDirectory( directoryPath ) ) |
269 | { |
270 | throw new FileNotFoundException(); |
271 | } |
272 | try |
273 | { |
274 | if ( isSearchChild ) |
275 | { |
276 | return Directory.GetFiles( directoryPath, searchPattern, SearchOption.AllDirectories ); |
277 | } |
278 | else |
279 | { |
280 | return Directory.GetFiles( directoryPath, searchPattern, SearchOption.TopDirectoryOnly ); |
281 | } |
282 | } |
283 | catch ( IOException ex ) |
284 | { |
285 | throw ex; |
286 | } |
287 | } |
288 | #endregion |
289 | #region 获取指定目录中的子目录列表 |
290 | /// <summary> |
291 | /// 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法. |
292 | /// </summary> |
293 | /// <param name="directoryPath">指定目录的绝对路径</param> |
294 | public static string [] GetDirectories( string directoryPath ) |
295 | { |
296 | try |
297 | { |
298 | return Directory.GetDirectories( directoryPath ); |
299 | } |
300 | catch ( IOException ex ) |
301 | { |
302 | throw ex; |
303 | } |
304 | } |
305 | /// <summary> |
306 | /// 获取指定目录及子目录中所有子目录列表 |
307 | /// </summary> |
308 | /// <param name="directoryPath">指定目录的绝对路径</param> |
309 | /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。 |
310 | /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param> |
311 | /// <param name="isSearchChild">是否搜索子目录</param> |
312 | public static string [] GetDirectories( string directoryPath, string searchPattern, bool isSearchChild ) |
313 | { |
314 | try |
315 | { |
316 | if ( isSearchChild ) |
317 | { |
318 | return Directory.GetDirectories( directoryPath, searchPattern, SearchOption.AllDirectories ); |
319 | } |
320 | else |
321 | { |
322 | return Directory.GetDirectories( directoryPath, searchPattern, SearchOption.TopDirectoryOnly ); |
323 | } |
324 | } |
325 | catch ( IOException ex ) |
326 | { |
327 | throw ex; |
328 | } |
329 | } |
330 | #endregion |
331 | #region 向文本文件写入内容 |
332 | /// <summary> |
333 | /// 向文本文件中写入内容 |
334 | /// </summary> |
335 | /// <param name="filePath">文件的绝对路径</param> |
336 | /// <param name="content">写入的内容</param> |
337 | public static void WriteText( string filePath, string content ) |
338 | { |
339 | //向文件写入内容 |
340 | File.WriteAllText( filePath, content ); |
341 | } |
342 | #endregion |
343 | #region 向文本文件的尾部追加内容 |
344 | /// <summary> |
345 | /// 向文本文件的尾部追加内容 |
346 | /// </summary> |
347 | /// <param name="filePath">文件的绝对路径</param> |
348 | /// <param name="content">写入的内容</param> |
349 | public static void AppendText( string filePath, string content ) |
350 | { |
351 | File.AppendAllText( filePath, content ); |
352 | } |
353 | #endregion |
354 | #region 将现有文件的内容复制到新文件中 |
355 | /// <summary> |
356 | /// 将源文件的内容复制到目标文件中 |
357 | /// </summary> |
358 | /// <param name="sourceFilePath">源文件的绝对路径</param> |
359 | /// <param name="destFilePath">目标文件的绝对路径</param> |
360 | public static void Copy( string sourceFilePath, string destFilePath ) |
361 | { |
362 | File.Copy( sourceFilePath, destFilePath, true ); |
363 | } |
364 | #endregion |
365 | #region 将文件移动到指定目录 |
366 | /// <summary> |
367 | /// 将文件移动到指定目录 |
368 | /// </summary> |
369 | /// <param name="sourceFilePath">需要移动的源文件的绝对路径</param> |
370 | /// <param name="descDirectoryPath">移动到的目录的绝对路径</param> |
371 | public static void Move( string sourceFilePath, string descDirectoryPath ) |
372 | { |
373 | //获取源文件的名称 |
374 | string sourceFileName = GetFileName( sourceFilePath ); |
375 | if ( IsExistDirectory( descDirectoryPath ) ) |
376 | { |
377 | //如果目标中存在同名文件,则删除 |
378 | if ( IsExistFile( descDirectoryPath + "\\" + sourceFileName ) ) |
379 | { |
380 | DeleteFile( descDirectoryPath + "\\" + sourceFileName ); |
381 | } |
382 | //将文件移动到指定目录 |
383 | File.Move( sourceFilePath, descDirectoryPath + "\\" + sourceFileName ); |
384 | } |
385 | } |
386 | #endregion |
387 | #region 将流读取到缓冲区中 |
388 | /// <summary> |
389 | /// 将流读取到缓冲区中 |
390 | /// </summary> |
391 | /// <param name="stream">原始流</param> |
392 | public static byte [] StreamToBytes( Stream stream ) |
393 | { |
394 | try |
395 | { |
396 | //创建缓冲区 |
397 | byte [] buffer = new byte [stream.Length]; |
398 | //读取流 |
399 | stream.Read( buffer, 0, ConvertHelper.ToInt32( stream.Length ) ); |
400 | //返回流 |
401 | return buffer; |
402 | } |
403 | catch ( Exception ex ) |
404 | { |
405 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
406 | throw ex; |
407 | } |
408 | finally |
409 | { |
410 | //关闭流 |
411 | stream.Close(); |
412 | } |
413 | } |
414 | #endregion |
415 | #region 将文件读取到缓冲区中 |
416 | /// <summary> |
417 | /// 将文件读取到缓冲区中 |
418 | /// </summary> |
419 | /// <param name="filePath">文件的绝对路径</param> |
420 | public static byte [] FileToBytes( string filePath ) |
421 | { |
422 | //获取文件的大小 |
423 | int fileSize = GetFileSize( filePath ); |
424 | //创建一个临时缓冲区 |
425 | byte [] buffer = new byte [fileSize]; |
426 | //创建一个文件流 |
427 | FileInfo fi = new FileInfo( filePath ); |
428 | FileStream fs = fi.Open( FileMode.Open ); |
429 | try |
430 | { |
431 | //将文件流读入缓冲区 |
432 | fs.Read( buffer, 0, fileSize ); |
433 | return buffer; |
434 | } |
435 | catch ( IOException ex ) |
436 | { |
437 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
438 | throw ex; |
439 | } |
440 | finally |
441 | { |
442 | //关闭文件流 |
443 | fs.Close(); |
444 | } |
445 | } |
446 | #endregion |
447 | #region 将文件读取到字符串中 |
448 | /// <summary> |
449 | /// 将文件读取到字符串中 |
450 | /// </summary> |
451 | /// <param name="filePath">文件的绝对路径</param> |
452 | public static string FileToString( string filePath ) |
453 | { |
454 | return FileToString( filePath, BaseInfo.DefaultEncoding ); |
455 | } |
456 | /// <summary> |
457 | /// 将文件读取到字符串中 |
458 | /// </summary> |
459 | /// <param name="filePath">文件的绝对路径</param> |
460 | /// <param name="encoding">字符编码</param> |
461 | public static string FileToString( string filePath,Encoding encoding ) |
462 | { |
463 | //创建流读取器 |
464 | StreamReader reader = new StreamReader( filePath, encoding ); |
465 | try |
466 | { |
467 | //读取流 |
468 | return reader.ReadToEnd(); |
469 | } |
470 | catch ( Exception ex ) |
471 | { |
472 | LogHelper.WriteTraceLog( TraceLogLevel.Error, ex.Message ); |
473 | throw ex; |
474 | } |
475 | finally |
476 | { |
477 | //关闭流读取器 |
478 | reader.Close(); |
479 | } |
480 | } |
481 | #endregion |
482 | #region 从文件的绝对路径中获取文件名( 包含扩展名 ) |
483 | /// <summary> |
484 | /// 从文件的绝对路径中获取文件名( 包含扩展名 ) |
485 | /// </summary> |
486 | /// <param name="filePath">文件的绝对路径</param> |
487 | public static string GetFileName( string filePath ) |
488 | { |
489 | //获取文件的名称 |
490 | FileInfo fi = new FileInfo( filePath ); |
491 | return fi.Name; |
492 | } |
493 | #endregion |
494 | #region 从文件的绝对路径中获取文件名( 不包含扩展名 ) |
495 | /// <summary> |
496 | /// 从文件的绝对路径中获取文件名( 不包含扩展名 ) |
497 | /// </summary> |
498 | /// <param name="filePath">文件的绝对路径</param> |
499 | public static string GetFileNameNoExtension( string filePath ) |
500 | { |
501 | //获取文件的名称 |
502 | FileInfo fi = new FileInfo( filePath ); |
503 | return fi.Name.Split( '.' )[0]; |
504 | } |
505 | #endregion |
506 | #region 从文件的绝对路径中获取扩展名 |
507 | /// <summary> |
508 | /// 从文件的绝对路径中获取扩展名 |
509 | /// </summary> |
510 | /// <param name="filePath">文件的绝对路径</param> |
511 | public static string GetExtension( string filePath ) |
512 | { |
513 | //获取文件的名称 |
514 | FileInfo fi = new FileInfo( filePath ); |
515 | return fi.Extension; |
516 | } |
517 | #endregion |
518 | #region 清空指定目录 |
519 | /// <summary> |
520 | /// 清空指定目录下所有文件及子目录,但该目录依然保存. |
521 | /// </summary> |
522 | /// <param name="directoryPath">指定目录的绝对路径</param> |
523 | public static void ClearDirectory( string directoryPath ) |
524 | { |
525 | if ( IsExistDirectory( directoryPath ) ) |
526 | { |
527 | //删除目录中所有的文件 |
528 | string [] fileNames = GetFileNames( directoryPath ); |
529 | for ( int i = 0; i < fileNames.Length; i++ ) |
530 | { |
531 | DeleteFile( fileNames[i] ); |
532 | } |
533 | //删除目录中所有的子目录 |
534 | string [] directoryNames = GetDirectories( directoryPath ); |
535 | for ( int i = 0; i < directoryNames.Length; i++ ) |
536 | { |
537 | DeleteDirectory( directoryNames[i] ); |
538 | } |
539 | } |
540 | } |
541 | #endregion |
542 | #region 清空文件内容 |
543 | /// <summary> |
544 | /// 清空文件内容 |
545 | /// </summary> |
546 | /// <param name="filePath">文件的绝对路径</param> |
547 | public static void ClearFile( string filePath ) |
548 | { |
549 | //删除文件 |
550 | File.Delete( filePath ); |
551 | //重新创建该文件 |
552 | CreateFile( filePath ); |
553 | } |
554 | #endregion |
555 | #region 删除指定文件 |
556 | /// <summary> |
557 | /// 删除指定文件 |
558 | /// </summary> |
559 | /// <param name="filePath">文件的绝对路径</param> |
560 | public static void DeleteFile( string filePath ) |
561 | { |
562 | if ( IsExistFile( filePath ) ) |
563 | { |
564 | File.Delete( filePath ); |
565 | } |
566 | } |
567 | #endregion |
568 | #region 删除指定目录 |
569 | /// <summary> |
570 | /// 删除指定目录及其所有子目录 |
571 | /// </summary> |
572 | /// <param name="directoryPath">指定目录的绝对路径</param> |
573 | public static void DeleteDirectory( string directoryPath ) |
574 | { |
575 | if ( IsExistDirectory( directoryPath ) ) |
576 | { |
577 | Directory.Delete( directoryPath, true ); |
578 | } |
579 | } |
580 | #endregion |
581 | } |
582 | } |