纽威
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.

852 lines
32 KiB

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