星火微课系统客户端
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

FileToolsCommon.cs 29KB

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