FileFunction.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. namespace BZFAStandardLib
  8. {
  9. /// <summary>
  10. /// txt文件操作专用类
  11. /// </summary>
  12. public static class FileOperate
  13. {
  14. private static Mutex mutexNew = new Mutex();
  15. private static Mutex mutexWrite = new Mutex();
  16. /// <summary>
  17. /// 新建文件,
  18. /// </summary>
  19. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  20. public static void NewTxtFile(string txtFile)
  21. {
  22. string path = txtFile.Substring(0, txtFile.LastIndexOf("\\"));
  23. if (!Directory.Exists(path)) Directory.CreateDirectory(path); //判断路径是否存在,不存在则创建
  24. if (!File.Exists(txtFile)) //判断文件是否存在,不存在则创建
  25. {
  26. using (FileStream fileStream = new FileStream(txtFile, FileMode.Create, FileAccess.Write))
  27. {
  28. fileStream.Close();
  29. }
  30. }
  31. }
  32. /// <summary>
  33. /// 新建并写入txt文件;
  34. /// </summary>
  35. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  36. /// <param name="txt">写入内容</param>
  37. public static bool NewTxtFile(string txtFile, string txt)
  38. {
  39. string path = txtFile.Substring(0, txtFile.LastIndexOf("\\"));
  40. if (!Directory.Exists(path)) Directory.CreateDirectory(path); //判断路径是否存在,不存在则创建
  41. try
  42. {
  43. using (FileStream fileStream = new FileStream(txtFile, FileMode.Create, FileAccess.Write)) //创建写入文件
  44. {
  45. StreamWriter streamWriter = new StreamWriter(fileStream);
  46. streamWriter.BaseStream.Seek(0, SeekOrigin.End); //在txt末尾写入;
  47. streamWriter.Write(txt); //写入txt文件内容;
  48. streamWriter.Flush();
  49. streamWriter.Close();
  50. fileStream.Close();
  51. }
  52. return true;
  53. }
  54. catch { return false; }
  55. }
  56. /// <summary>
  57. /// 带锁
  58. /// </summary>
  59. /// <param name="txtFile"></param>
  60. public static void NewFile(string file)
  61. {
  62. try
  63. {
  64. mutexNew.WaitOne();
  65. string path = file.Substring(0, file.LastIndexOf("\\"));
  66. if (!Directory.Exists(path)) Directory.CreateDirectory(path); //判断路径是否存在,不存在则创建
  67. if (!File.Exists(file)) //判断文件是否存在,不存在则创建
  68. {
  69. using (FileStream fileStream = new FileStream(file, FileMode.Create, FileAccess.Write))
  70. {
  71. fileStream.Close();
  72. }
  73. }
  74. mutexNew.ReleaseMutex();
  75. }
  76. catch (Exception ex)
  77. {
  78. mutexNew.ReleaseMutex();
  79. }
  80. }
  81. /// <summary>
  82. /// 写入txt文件;
  83. /// </summary>
  84. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  85. /// <param name="txt">写入内容</param>
  86. public static bool WriteTxtFile(string txtFile, string txt)
  87. {
  88. if (!File.Exists(txtFile)) NewTxtFile(txtFile); //判断文件是否存在,不存在则新建;
  89. try
  90. {
  91. using (FileStream fileStream = new FileStream(txtFile, FileMode.Open, FileAccess.Write)) //写入文件
  92. {
  93. StreamWriter streamWriter = new StreamWriter(fileStream);
  94. //sw.BaseStream的Position或Seek()可移动文件流指针到的任意位置;
  95. streamWriter.BaseStream.Seek(0, SeekOrigin.End); //在txt末尾写入;
  96. streamWriter.Write(txt); //写入txt文件内容;
  97. streamWriter.Flush();
  98. streamWriter.Close();
  99. fileStream.Close();
  100. }
  101. return true;
  102. }
  103. catch { return false; }
  104. }
  105. /// <summary>
  106. /// 带锁
  107. /// </summary>
  108. /// <param name="txtFile"></param>
  109. /// <param name="txt"></param>
  110. public static void WriteFile(string file, string txt)
  111. {
  112. try
  113. {
  114. mutexWrite.WaitOne();
  115. if (!File.Exists(file)) NewFile(file); //判断文件是否存在,不存在则新建;
  116. using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Write)) //写入文件
  117. {
  118. StreamWriter streamWriter = new StreamWriter(fileStream);
  119. //sw.BaseStream的Position或Seek()可移动文件流指针到的任意位置;
  120. streamWriter.BaseStream.Seek(0, SeekOrigin.End); //在txt末尾写入;
  121. streamWriter.Write(txt); //写入txt文件内容;
  122. streamWriter.Flush();
  123. streamWriter.Close();
  124. fileStream.Close();
  125. }
  126. mutexWrite.ReleaseMutex();
  127. }
  128. catch
  129. {
  130. mutexWrite.ReleaseMutex();
  131. }
  132. }
  133. /// <summary>
  134. /// 读取txt文件内容;
  135. /// </summary>
  136. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  137. /// <returns>返回txt文件内容</returns>
  138. public static string ReadTxtFile(string txtFile)
  139. {
  140. if (!File.Exists(txtFile)) return ""; //判断文件是否存在;
  141. string Return = "";
  142. using (FileStream fileStream = new FileStream(txtFile, FileMode.Open, FileAccess.Read))
  143. {
  144. StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8);
  145. Return = streamReader.ReadToEnd().ToString();
  146. streamReader.Close();
  147. fileStream.Close();
  148. }
  149. return Return;
  150. }
  151. /// <summary>
  152. /// 读取最后一行内容;
  153. /// </summary>
  154. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  155. /// <returns></returns>
  156. public static string ReadLastLine(string txtFile)
  157. {
  158. if (!File.Exists(txtFile)) return ""; //判断文件是否存在;
  159. string[] allLines = File.ReadAllLines(txtFile);
  160. if (allLines.Length > 0)
  161. return allLines[allLines.Length - 1];
  162. else return "";
  163. }
  164. /// <summary>
  165. /// 覆盖最后一行内容;
  166. /// </summary>
  167. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  168. /// <param name="txt"></param>
  169. public static void CoverLastLine(string txtFile, string txt)
  170. {
  171. if (File.Exists(txtFile)) //判断文件是否存在;
  172. {
  173. string[] allLines = File.ReadAllLines(txtFile);
  174. if (allLines.Length > 0)
  175. {
  176. allLines[allLines.Length - 1] = txt;
  177. File.WriteAllLines(txtFile, allLines);
  178. }
  179. }
  180. }
  181. /// <summary>
  182. /// 移除最后一行内容;
  183. /// </summary>
  184. /// <param name="txtFile">文件路径+文件名(包含扩展名)</param>
  185. public static void RemoveLastLine(string txtFile)
  186. {
  187. if (File.Exists(txtFile)) //判断文件是否存在
  188. {
  189. string[] allLines = File.ReadAllLines(txtFile);
  190. if (allLines.Length > 0)
  191. {
  192. Array.Resize(ref allLines, allLines.Length - 1);
  193. File.WriteAllLines(txtFile, allLines);
  194. }
  195. }
  196. }
  197. }
  198. }