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 |
} |
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 |
} |