星火微课系统客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FileToolsCommon.cs 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875
  1. using System;
  2. using System.Configuration;
  3. using System.IO;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Windows.Forms;
  7. namespace Common.system
  8. {
  9. /// <summary>
  10. /// 文件工具公共方法
  11. /// 创建人:赵耀
  12. /// 创建时间:2018年11月6日
  13. /// </summary>
  14. public static class FileToolsCommon
  15. {
  16. #region 获取文件的绝对路径
  17. /// <summary>
  18. /// 获取文件的绝对路径
  19. /// </summary>
  20. /// <param name="Path">相对路径</param>
  21. /// <returns></returns>
  22. public static string GetFileAbsolutePath(string Path = "")
  23. {
  24. try
  25. {
  26. if (!string.IsNullOrWhiteSpace(Path))
  27. {
  28. Path = Path.Replace("\\", "/");
  29. if (Path != "/")
  30. {
  31. if (Path.Substring(1, 1) == ":")
  32. return Path;
  33. if (Path.Substring(0, 1) != "/")
  34. Path = "/" + Path;
  35. }
  36. }
  37. string AbsolutePath = Application.StartupPath.ToString().Replace("\\", "/") + Path;
  38. return AbsolutePath;
  39. }
  40. catch (Exception)
  41. {
  42. return Path;
  43. }
  44. }
  45. /// <summary>
  46. /// 获取合法路径 结尾带/
  47. /// </summary>
  48. /// <returns></returns>
  49. public static string GetLegalPath(string FilePath)
  50. {
  51. FilePath = System.IO.Path.Combine(FilePath.Replace("\\", "/"));
  52. FilePath += (FilePath.Substring(FilePath.Length - 1, 1) == "/" ? "" : "/");
  53. return FilePath;
  54. }
  55. #endregion
  56. #region 检测路径是否合法
  57. /// <summary>
  58. /// 检测路径是否合法
  59. /// </summary>
  60. /// <param name="FilePathName">绝对路径</param>
  61. /// <param name="ErrMessage">返回错误</param>
  62. /// <returns></returns>
  63. public static bool IsLegalPath(string FilePathName, out string ErrMessage)
  64. {
  65. string FilePath;
  66. string FileName;
  67. ErrMessage = "";
  68. try
  69. {
  70. FilePathName = GetLegalPath(FilePathName);
  71. FilePath = GetDirectoryName(FilePathName);
  72. FileName = GetIOFileName(FilePathName);
  73. }
  74. catch (Exception)
  75. {
  76. ErrMessage = "路径或文件名不合法!";
  77. return false;
  78. }
  79. Regex regex = new Regex(@"^([a-zA-Z]:\\)?[^\/\:\*\?\""\<\>\|\,]*$");
  80. Match m = regex.Match(FilePath);
  81. if (!m.Success)
  82. {
  83. ErrMessage = "非法的文件保存路径!";
  84. return false;
  85. }
  86. if (!string.IsNullOrWhiteSpace(FileName))
  87. {
  88. regex = new Regex(@"^[^\/\:\*\?\""\<\>\|\,]+$");
  89. m = regex.Match(FileName);
  90. if (!m.Success)
  91. {
  92. ErrMessage = "非法的文件名!文件名中包含\\ / : * ? \" < > |等字符!";
  93. return false;
  94. }
  95. }
  96. return true;
  97. }
  98. #endregion
  99. #region 检测指定目录是否存在
  100. /// <summary>
  101. /// 检测指定目录是否存在
  102. /// </summary>
  103. /// <param name="directoryPath">目录的绝对路径</param>
  104. public static bool IsExistDirectory(string directoryPath)
  105. {
  106. return Directory.Exists(directoryPath);
  107. }
  108. #endregion
  109. #region 检测指定文件是否存在
  110. /// <summary>
  111. /// 检测指定文件是否存在,如果存在则返回true。
  112. /// </summary>
  113. /// <param name="filePath">文件的绝对路径</param>
  114. public static bool IsExistFile(string filePath)
  115. {
  116. return File.Exists(filePath);
  117. }
  118. #endregion
  119. #region 检测指定目录是否为空
  120. /// <summary>
  121. /// 检测指定目录是否为空
  122. /// </summary>
  123. /// <param name="directoryPath">指定目录的绝对路径</param>
  124. public static bool IsEmptyDirectory(string directoryPath)
  125. {
  126. try
  127. {
  128. //判断是否存在文件
  129. string[] fileNames = GetFileNames(directoryPath);
  130. if (fileNames.Length > 0)
  131. {
  132. return false;
  133. }
  134. //判断是否存在文件夹
  135. string[] directoryNames = GetDirectories(directoryPath);
  136. return directoryNames.Length <= 0;
  137. }
  138. catch
  139. {
  140. return false;
  141. }
  142. }
  143. #endregion
  144. #region 检测指定目录中是否存在指定的文件
  145. /// <summary>
  146. /// 检测指定目录中是否存在指定的文件,若要搜索子目录请使用重载方法.
  147. /// </summary>
  148. /// <param name="directoryPath">指定目录的绝对路径</param>
  149. /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
  150. /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
  151. public static bool Contains(string directoryPath, string searchPattern)
  152. {
  153. try
  154. {
  155. //获取指定的文件列表
  156. string[] fileNames = GetFileNames(directoryPath, searchPattern, false);
  157. //判断指定文件是否存在
  158. return fileNames.Length != 0;
  159. }
  160. catch
  161. {
  162. return false;
  163. }
  164. }
  165. /// <summary>
  166. /// 检测指定目录中是否存在指定的文件
  167. /// </summary>
  168. /// <param name="directoryPath">指定目录的绝对路径</param>
  169. /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
  170. /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
  171. /// <param name="isSearchChild">是否搜索子目录</param>
  172. public static bool Contains(string directoryPath, string searchPattern, bool isSearchChild)
  173. {
  174. try
  175. {
  176. //获取指定的文件列表
  177. string[] fileNames = GetFileNames(directoryPath, searchPattern, isSearchChild);
  178. //判断指定文件是否存在
  179. return fileNames.Length != 0;
  180. }
  181. catch
  182. {
  183. return false;
  184. }
  185. }
  186. #endregion
  187. #region 创建一个目录
  188. /// <summary>
  189. /// 创建一个目录
  190. /// </summary>
  191. /// <param name="directoryPath">目录的绝对路径</param>
  192. public static void CreateDirectory(string directoryPath)
  193. {
  194. try
  195. {
  196. //如果目录不存在则创建该目录
  197. if (!IsExistDirectory(directoryPath))
  198. {
  199. Directory.CreateDirectory(directoryPath);
  200. }
  201. }
  202. catch (Exception ex)
  203. {
  204. throw new ApplicationException(ex.Message); //"请使用管理员权限运行!"
  205. }
  206. }
  207. #endregion
  208. #region 创建一个文件
  209. /// <summary>
  210. /// 创建一个文件。
  211. /// </summary>
  212. /// <param name="filePath">文件的绝对路径</param>
  213. public static bool CreateFile(string filePath)
  214. {
  215. try
  216. {
  217. //如果文件不存在则创建该文件
  218. if (!IsExistFile(filePath))
  219. {
  220. //创建一个FileInfo对象
  221. FileInfo file = new FileInfo(filePath);
  222. //创建文件
  223. FileStream fs = file.Create();
  224. //关闭文件流
  225. fs.Close();
  226. }
  227. }
  228. catch
  229. {
  230. return false;
  231. }
  232. return true;
  233. }
  234. /// <summary>
  235. /// 创建一个文件,并将字节流写入文件。
  236. /// </summary>
  237. /// <param name="filePath">文件的绝对路径</param>
  238. /// <param name="buffer">二进制流数据</param>
  239. public static bool CreateFile(string filePath, byte[] buffer)
  240. {
  241. try
  242. {
  243. //如果文件不存在则创建该文件
  244. if (!IsExistFile(filePath))
  245. {
  246. //创建一个FileInfo对象
  247. FileInfo file = new FileInfo(filePath);
  248. //创建文件
  249. FileStream fs = file.Create();
  250. //写入二进制流
  251. fs.Write(buffer, 0, buffer.Length);
  252. //关闭文件流
  253. fs.Close();
  254. }
  255. }
  256. catch
  257. {
  258. return false;
  259. }
  260. return true;
  261. }
  262. #endregion
  263. #region 获取文本文件的行数
  264. /// <summary>
  265. /// 获取文本文件的行数
  266. /// </summary>
  267. /// <param name="filePath">文件的绝对路径</param>
  268. public static int GetLineCount(string filePath)
  269. {
  270. //将文本文件的各行读到一个字符串数组中
  271. string[] rows = File.ReadAllLines(filePath);
  272. //返回行数
  273. return rows.Length;
  274. }
  275. #endregion
  276. #region 获取一个文件的长度
  277. /// <summary>
  278. /// 获取一个文件的长度,单位为Byte
  279. /// </summary>
  280. /// <param name="filePath">文件的绝对路径</param>
  281. public static int GetFileSize(string filePath)
  282. {
  283. //创建一个文件对象
  284. FileInfo fi = new FileInfo(filePath);
  285. //获取文件的大小
  286. return (int)fi.Length;
  287. }
  288. /// <summary>
  289. /// 获取一个文件的长度,单位为KB
  290. /// </summary>
  291. /// <param name="filePath">文件的路径</param>
  292. public static double GetFileSizeByKB(string filePath)
  293. {
  294. //创建一个文件对象
  295. FileInfo fi = new FileInfo(filePath);
  296. long size = fi.Length / 1024;
  297. //获取文件的大小
  298. return double.Parse(size.ToString());
  299. }
  300. /// <summary>
  301. /// 获取一个文件的长度,单位为MB
  302. /// </summary>
  303. /// <param name="filePath">文件的路径</param>
  304. public static double GetFileSizeByMB(string filePath)
  305. {
  306. //创建一个文件对象
  307. FileInfo fi = new FileInfo(filePath);
  308. long size = fi.Length / 1024 / 1024;
  309. //获取文件的大小
  310. return double.Parse(size.ToString());
  311. }
  312. #endregion
  313. #region 获取指定目录中的文件列表
  314. /// <summary>
  315. /// 获取指定目录中所有文件列表
  316. /// </summary>
  317. /// <param name="directoryPath">指定目录的绝对路径</param>
  318. public static FileInfo[] GetFileInfos(string directoryPath, string files = null)
  319. {
  320. //如果目录不存在,则抛出异常
  321. if (!IsExistDirectory(directoryPath))
  322. {
  323. return null;//throw new FileNotFoundException();
  324. }
  325. DirectoryInfo folder = new DirectoryInfo(directoryPath);
  326. FileInfo[] fileList;
  327. if (files == null)
  328. fileList = folder.GetFiles();
  329. else
  330. fileList = folder.GetFiles(files);
  331. //获取文件列表
  332. return fileList;
  333. }
  334. /// <summary>
  335. /// 获取指定目录中所有文件列表
  336. /// </summary>
  337. /// <param name="directoryPath">指定目录的绝对路径</param>
  338. public static string[] GetFileNames(string directoryPath)
  339. {
  340. //如果目录不存在,则抛出异常
  341. if (!IsExistDirectory(directoryPath))
  342. {
  343. return null;//throw new FileNotFoundException();
  344. }
  345. //获取文件列表
  346. return Directory.GetFiles(directoryPath);
  347. }
  348. /// <summary>
  349. /// 获取指定目录及子目录中所有文件列表
  350. /// </summary>
  351. /// <param name="directoryPath">指定目录的绝对路径</param>
  352. /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
  353. /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
  354. /// <param name="isSearchChild">是否搜索子目录</param>
  355. public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild)
  356. {
  357. //如果目录不存在,则抛出异常
  358. if (!IsExistDirectory(directoryPath))
  359. {
  360. return null;//throw new FileNotFoundException();
  361. }
  362. try
  363. {
  364. return Directory.GetFiles(directoryPath, searchPattern, isSearchChild ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
  365. }
  366. catch
  367. {
  368. return null;
  369. }
  370. }
  371. #endregion
  372. #region 获取指定目录中的子目录列表
  373. /// <summary>
  374. /// 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法.
  375. /// </summary>
  376. /// <param name="directoryPath">指定目录的绝对路径</param>
  377. public static string[] GetDirectories(string directoryPath)
  378. {
  379. try
  380. {
  381. return Directory.GetDirectories(directoryPath);
  382. }
  383. catch
  384. {
  385. return null;
  386. }
  387. }
  388. /// <summary>
  389. /// 获取指定目录及子目录中所有子目录列表
  390. /// </summary>
  391. /// <param name="directoryPath">指定目录的绝对路径</param>
  392. /// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
  393. /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
  394. /// <param name="isSearchChild">是否搜索子目录</param>
  395. public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)
  396. {
  397. try
  398. {
  399. return Directory.GetDirectories(directoryPath, searchPattern, isSearchChild ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
  400. }
  401. catch
  402. {
  403. return null;//throw
  404. }
  405. }
  406. #endregion
  407. #region 向文本文件写入内容
  408. /// <summary>
  409. /// 向文本文件中写入内容
  410. /// </summary>
  411. /// <param name="filePath">文件的绝对路径</param>
  412. /// <param name="content">写入的内容</param>
  413. public static void WriteText(string filePath, string content)
  414. {
  415. //向文件写入内容
  416. File.WriteAllText(filePath, content);
  417. }
  418. #endregion
  419. #region 向文本文件的尾部追加内容
  420. /// <summary>
  421. /// 向文本文件的尾部追加内容
  422. /// </summary>
  423. /// <param name="filePath">文件的绝对路径</param>
  424. /// <param name="content">写入的内容</param>
  425. public static void AppendText(string filePath, string content)
  426. {
  427. File.AppendAllText(filePath, content);
  428. }
  429. #endregion
  430. #region 将现有文件的内容复制到新文件中
  431. /// <summary>
  432. /// 将源文件的内容复制到目标文件中
  433. /// </summary>
  434. /// <param name="sourceFilePath">源文件的绝对路径</param>
  435. /// <param name="destFilePath">目标文件的绝对路径</param>
  436. public static void Copy(string sourceFilePath, string destFilePath)
  437. {
  438. File.Copy(sourceFilePath, destFilePath, true);
  439. }
  440. #endregion
  441. #region 将文件移动到指定目录
  442. /// <summary>
  443. /// 将文件移动到指定目录
  444. /// </summary>
  445. /// <param name="sourceFilePath">需要移动的源文件的绝对路径</param>
  446. /// <param name="descDirectoryPath">移动到的目录的绝对路径</param>
  447. public static void Move(string sourceFilePath, string descDirectoryPath)
  448. {
  449. //获取源文件的名称
  450. string sourceFileName = GetFileName(sourceFilePath);
  451. if (IsExistDirectory(descDirectoryPath))
  452. {
  453. //如果目标中存在同名文件,则删除
  454. if (IsExistFile(descDirectoryPath + "\\" + sourceFileName))
  455. {
  456. DeleteFile(descDirectoryPath + "\\" + sourceFileName);
  457. }
  458. //将文件移动到指定目录
  459. File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFileName);
  460. }
  461. }
  462. #endregion
  463. #region 将流读取到缓冲区中
  464. /// <summary>
  465. /// 将流读取到缓冲区中
  466. /// </summary>
  467. /// <param name="stream">原始流</param>
  468. public static byte[] StreamToBytes(Stream stream)
  469. {
  470. try
  471. {
  472. //创建缓冲区
  473. byte[] buffer = new byte[stream.Length];
  474. //读取流
  475. stream.Read(buffer, 0, int.Parse(stream.Length.ToString()));
  476. //返回流
  477. return buffer;
  478. }
  479. catch
  480. {
  481. return null;
  482. }
  483. finally
  484. {
  485. //关闭流
  486. stream.Close();
  487. }
  488. }
  489. #endregion
  490. #region 将文件读取到缓冲区中
  491. /// <summary>
  492. /// 将文件读取到缓冲区中
  493. /// </summary>
  494. /// <param name="filePath">文件的绝对路径</param>
  495. public static byte[] FileToBytes(string filePath)
  496. {
  497. //获取文件的大小
  498. int fileSize = GetFileSize(filePath);
  499. //创建一个临时缓冲区
  500. byte[] buffer = new byte[fileSize];
  501. //创建一个文件流
  502. FileInfo fi = new FileInfo(filePath);
  503. FileStream fs = fi.Open(FileMode.Open);
  504. try
  505. {
  506. //将文件流读入缓冲区
  507. fs.Read(buffer, 0, fileSize);
  508. return buffer;
  509. }
  510. catch
  511. {
  512. return null;
  513. }
  514. finally
  515. {
  516. //关闭文件流
  517. fs.Close();
  518. }
  519. }
  520. #endregion
  521. #region 将文件读取到字符串中
  522. /// <summary>
  523. /// 将文件读取到字符串中
  524. /// </summary>
  525. /// <param name="filePath">文件的绝对路径</param>
  526. public static string FileToString(string filePath)
  527. {
  528. //return FileToString(filePath, Encoding.Default);
  529. return FileToString(filePath, Encoding.UTF8);
  530. }
  531. /// <summary>
  532. /// 将文件读取到字符串中
  533. /// </summary>
  534. /// <param name="filePath">文件的绝对路径</param>
  535. /// <param name="encoding">字符编码</param>
  536. public static string FileToString(string filePath, Encoding encoding)
  537. {
  538. //创建流读取器
  539. StreamReader reader = new StreamReader(filePath, encoding);
  540. try
  541. {
  542. //读取流
  543. return reader.ReadToEnd();
  544. }
  545. catch
  546. {
  547. return string.Empty;
  548. }
  549. finally
  550. {
  551. //关闭流读取器
  552. reader.Close();
  553. }
  554. }
  555. #endregion
  556. #region 从文件的绝对路径中获取文件名( 包含扩展名 )
  557. /// <summary>
  558. /// 从文件的绝对路径中获取文件名( 包含扩展名 )
  559. /// </summary>
  560. /// <param name="filePath">文件的绝对路径</param>
  561. public static string GetFileName(string filePath)
  562. {
  563. //获取文件的名称
  564. FileInfo fi = new FileInfo(filePath);
  565. return fi.Name;
  566. }
  567. /// <summary>
  568. /// 使用IO从文件的绝对路径中获取文件名( 包含扩展名 )
  569. /// </summary>
  570. /// <param name="filePath">文件的绝对路径</param>
  571. public static string GetIOFileName(string filePath)
  572. {
  573. return Path.GetFileName(filePath);
  574. }
  575. #endregion
  576. #region 从文件的绝对路径中获取文件名( 不包含扩展名 )
  577. /// <summary>
  578. /// 从文件的绝对路径中获取文件名( 不包含扩展名 )
  579. /// </summary>
  580. /// <param name="filePath">文件的绝对路径</param>
  581. public static string GetFileNameNoExtension(string filePath)
  582. {
  583. //获取文件的名称
  584. FileInfo fi = new FileInfo(filePath);
  585. return fi.Name.Split('.')[0];
  586. }
  587. /// <summary>
  588. /// 使用IO从文件的绝对路径中获取文件名( 不包含扩展名 )
  589. /// </summary>
  590. /// <param name="filePath">文件的绝对路径</param>
  591. public static string GetIOFileNameNoExtension(string filePath)
  592. {
  593. return System.IO.Path.GetFileNameWithoutExtension(filePath);
  594. }
  595. #endregion
  596. #region 从文件的绝对路径中获取扩展名
  597. /// <summary>
  598. /// 从文件的绝对路径中获取扩展名
  599. /// </summary>
  600. /// <param name="filePath">文件的绝对路径</param>
  601. public static string GetExtension(string filePath)
  602. {
  603. //获取文件的名称
  604. FileInfo fi = new FileInfo(filePath);
  605. return fi.Extension;
  606. }
  607. /// <summary>
  608. /// 使用IO从文件的绝对路径中获取扩展名
  609. /// </summary>
  610. /// <param name="filePath">文件的绝对路径</param>
  611. public static string GetIOExtension(string filePath)
  612. {
  613. string Extension = System.IO.Path.GetExtension(filePath);
  614. return Extension;
  615. }
  616. #endregion
  617. #region 从文件的绝对路径中获取路径名
  618. /// <summary>
  619. /// 使用IO从文件的绝对路径中获取路径名
  620. /// </summary>
  621. /// <param name="filePath">文件的绝对路径</param>
  622. public static string GetDirectoryName(string filePath)
  623. {
  624. string DirectoryName = (System.IO.Path.GetDirectoryName(filePath+ "\\") ).Replace("\\", "/");
  625. return DirectoryName;
  626. }
  627. #endregion
  628. #region 清空指定目录
  629. /// <summary>
  630. /// 清空指定目录下所有文件及子目录,但该目录依然保存.
  631. /// </summary>
  632. /// <param name="directoryPath">指定目录的绝对路径</param>
  633. public static void ClearDirectory(string directoryPath)
  634. {
  635. if (IsExistDirectory(directoryPath))
  636. {
  637. //删除目录中所有的文件
  638. string[] fileNames = GetFileNames(directoryPath);
  639. foreach (string t in fileNames)
  640. {
  641. DeleteFile(t);
  642. }
  643. //删除目录中所有的子目录
  644. string[] directoryNames = GetDirectories(directoryPath);
  645. foreach (string t in directoryNames)
  646. {
  647. DeleteDirectory(t);
  648. }
  649. }
  650. }
  651. #endregion
  652. #region 清空文件内容
  653. /// <summary>
  654. /// 清空文件内容
  655. /// </summary>
  656. /// <param name="filePath">文件的绝对路径</param>
  657. public static void ClearFile(string filePath)
  658. {
  659. //删除文件
  660. File.Delete(filePath);
  661. //重新创建该文件
  662. CreateFile(filePath);
  663. }
  664. #endregion
  665. #region 删除指定文件
  666. /// <summary>
  667. /// 删除指定文件
  668. /// </summary>
  669. /// <param name="filePath">文件的绝对路径</param>
  670. public static void DeleteFile(string filePath)
  671. {
  672. if (IsExistFile(filePath))
  673. {
  674. File.Delete(filePath);
  675. }
  676. }
  677. #endregion
  678. #region 删除指定目录
  679. /// <summary>
  680. /// 删除指定目录及其所有子目录
  681. /// </summary>
  682. /// <param name="directoryPath">指定目录的绝对路径</param>
  683. public static void DeleteDirectory(string directoryPath)
  684. {
  685. if (IsExistDirectory(directoryPath))
  686. {
  687. Directory.Delete(directoryPath, true);
  688. }
  689. }
  690. #endregion
  691. #region 获取指定目录大小
  692. /// <summary>
  693. /// 获取目录大小
  694. /// </summary>
  695. /// <param name="directoryPath">目录地址</param>
  696. /// <returns> 单位:MB</returns>
  697. public static double PathSize(string directoryPath)
  698. {
  699. DirectoryInfo folder = new DirectoryInfo(directoryPath);
  700. double DirectorySize = DirSize(folder);
  701. for (int i = 0; i < 2; i++)
  702. {
  703. DirectorySize /= (double)1024;
  704. }
  705. return DirectorySize;
  706. }
  707. /// <summary>
  708. /// 获取目录大小
  709. /// </summary>
  710. /// <param name="d">目录</param>
  711. /// <returns>字节</returns>
  712. public static long DirSize(DirectoryInfo d)
  713. {
  714. long Size = 0;
  715. // 所有文件大小.
  716. FileInfo[] fis = d.GetFiles();
  717. foreach (FileInfo fi in fis)
  718. {
  719. Size += fi.Length;
  720. }
  721. // 遍历出当前目录的所有文件夹.
  722. DirectoryInfo[] dis = d.GetDirectories();
  723. foreach (DirectoryInfo di in dis)
  724. {
  725. Size += DirSize(di); //这就用到递归了,调用父方法,注意,这里并不是直接返回值,而是调用父返回来的
  726. }
  727. return (Size);
  728. }
  729. #endregion
  730. #region 移动目录
  731. /// <summary>
  732. /// 移动目录并重命名
  733. /// </summary>
  734. /// <param name="directoryPath">操作目录绝对路径</param>
  735. /// <param name="newDirectoryPath">目标目录绝对路径</param>
  736. /// <param name="Message">返回错误消息,成功则为空</param>
  737. /// <returns></returns>
  738. public static bool MoveDirectory(string directoryPath, string newDirectoryPath, out string Message)
  739. {
  740. Message = "";
  741. try
  742. {
  743. if (!IsExistDirectory(directoryPath))//判断目录是否存在
  744. {
  745. Message = "操作目录不存在!";
  746. return false;
  747. }
  748. if (IsExistDirectory(newDirectoryPath))
  749. {
  750. Message = "目标目录已存在!";
  751. return false;
  752. }
  753. Directory.Move(directoryPath, newDirectoryPath);
  754. return true;
  755. }
  756. catch (Exception ex)
  757. {
  758. Message = ex.Message;
  759. return false;
  760. }
  761. }
  762. #endregion
  763. #region 操作配置文件
  764. #region 从配置文件获取Value
  765. /// <summary>
  766. /// 从配置文件获取Value
  767. /// </summary>
  768. /// <param name="key">配置文件中key字符串</param>
  769. /// <returns></returns>
  770. public static string GetConfigValue(string key)
  771. {
  772. try
  773. {
  774. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  775. //获取AppSettings的节点
  776. AppSettingsSection appsection = (AppSettingsSection)config.GetSection("appSettings");
  777. return appsection.Settings[key].Value;
  778. }
  779. catch
  780. {
  781. return "";
  782. }
  783. }
  784. #endregion
  785. #region 设置配置文件
  786. /// <summary>
  787. /// 设置配置文件
  788. /// </summary>
  789. /// <param name="key">配置文件中key字符串</param>
  790. /// <param name="value">配置文件中value字符串</param>
  791. /// <returns></returns>
  792. public static bool SetConfigValue(string key, string value)
  793. {
  794. try
  795. {
  796. //打开配置文件
  797. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  798. //获取AppSettings的节点
  799. AppSettingsSection appsection = (AppSettingsSection)config.GetSection("appSettings");
  800. appsection.Settings[key].Value = value;
  801. config.Save();
  802. return true;
  803. }
  804. catch
  805. {
  806. return false;
  807. }
  808. }
  809. #endregion
  810. #endregion
  811. }
  812. }