using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
namespace BZFAStandardLib
{
///
/// txt文件操作专用类
///
public static class FileOperate
{
private static Mutex mutexNew = new Mutex();
private static Mutex mutexWrite = new Mutex();
///
/// 新建文件,
///
/// 文件路径+文件名(包含扩展名)
public static void NewTxtFile(string txtFile)
{
string path = txtFile.Substring(0, txtFile.LastIndexOf("\\"));
if (!Directory.Exists(path)) Directory.CreateDirectory(path); //判断路径是否存在,不存在则创建
if (!File.Exists(txtFile)) //判断文件是否存在,不存在则创建
{
using (FileStream fileStream = new FileStream(txtFile, FileMode.Create, FileAccess.Write))
{
fileStream.Close();
}
}
}
///
/// 新建并写入txt文件;
///
/// 文件路径+文件名(包含扩展名)
/// 写入内容
public static void NewTxtFile(string txtFile, string txt)
{
string str1 = "\r\n====================================================================\r\n";
string str2 = "\r\n====================================================================";
string path = txtFile.Substring(0, txtFile.LastIndexOf("\\"));
bool fileExists = File.Exists(txtFile);
// 如果文件不存在,则创建文件并写入内容
if (!fileExists)
{
using (FileStream fileStream = new FileStream(txtFile, FileMode.Create, FileAccess.Write))
using (StreamWriter streamWriter = new StreamWriter(fileStream))
{
streamWriter.Write(str1 + txt + str2); // 直接写入内容
}
}
else
{
// 如果文件存在,则打开文件并在末尾追加内容
using (FileStream fileStream = new FileStream(txtFile, FileMode.Append, FileAccess.Write))
using (StreamWriter streamWriter = new StreamWriter(fileStream))
{
streamWriter.WriteLine(str1 + txt + str2); // 使用 WriteLine 确保有换行符
}
}
}
///
/// 带锁
///
///
public static void NewFile(string file)
{
try
{
mutexNew.WaitOne();
string path = file.Substring(0, file.LastIndexOf("\\"));
if (!Directory.Exists(path)) Directory.CreateDirectory(path); //判断路径是否存在,不存在则创建
if (!File.Exists(file)) //判断文件是否存在,不存在则创建
{
using (FileStream fileStream = new FileStream(file, FileMode.Create, FileAccess.Write))
{
fileStream.Close();
}
}
mutexNew.ReleaseMutex();
}
catch (Exception ex)
{
mutexNew.ReleaseMutex();
}
}
///
/// 写入txt文件;
///
/// 文件路径+文件名(包含扩展名)
/// 写入内容
public static bool WriteTxtFile(string txtFile, string txt)
{
if (!File.Exists(txtFile)) NewTxtFile(txtFile); //判断文件是否存在,不存在则新建;
try
{
using (FileStream fileStream = new FileStream(txtFile, FileMode.Open, FileAccess.Write)) //写入文件
{
StreamWriter streamWriter = new StreamWriter(fileStream);
//sw.BaseStream的Position或Seek()可移动文件流指针到的任意位置;
streamWriter.BaseStream.Seek(0, SeekOrigin.End); //在txt末尾写入;
streamWriter.Write(txt); //写入txt文件内容;
streamWriter.Flush();
streamWriter.Close();
fileStream.Close();
}
return true;
}
catch { return false; }
}
///
/// 带锁
///
///
///
public static void WriteFile(string file, string txt)
{
try
{
mutexWrite.WaitOne();
if (!File.Exists(file)) NewFile(file); //判断文件是否存在,不存在则新建;
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Write)) //写入文件
{
StreamWriter streamWriter = new StreamWriter(fileStream);
//sw.BaseStream的Position或Seek()可移动文件流指针到的任意位置;
streamWriter.BaseStream.Seek(0, SeekOrigin.End); //在txt末尾写入;
streamWriter.Write(txt); //写入txt文件内容;
streamWriter.Flush();
streamWriter.Close();
fileStream.Close();
}
mutexWrite.ReleaseMutex();
}
catch
{
mutexWrite.ReleaseMutex();
}
}
///
/// 读取txt文件内容;
///
/// 文件路径+文件名(包含扩展名)
/// 返回txt文件内容
public static string ReadTxtFile(string txtFile)
{
if (!File.Exists(txtFile)) return ""; //判断文件是否存在;
string Return = "";
using (FileStream fileStream = new FileStream(txtFile, FileMode.Open, FileAccess.Read))
{
StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8);
Return = streamReader.ReadToEnd().ToString();
streamReader.Close();
fileStream.Close();
}
return Return;
}
///
/// 读取最后一行内容;
///
/// 文件路径+文件名(包含扩展名)
///
public static string ReadLastLine(string txtFile)
{
if (!File.Exists(txtFile)) return ""; //判断文件是否存在;
string[] allLines = File.ReadAllLines(txtFile);
if (allLines.Length > 0)
return allLines[allLines.Length - 1];
else return "";
}
///
/// 覆盖最后一行内容;
///
/// 文件路径+文件名(包含扩展名)
///
public static void CoverLastLine(string txtFile, string txt)
{
if (File.Exists(txtFile)) //判断文件是否存在;
{
string[] allLines = File.ReadAllLines(txtFile);
if (allLines.Length > 0)
{
allLines[allLines.Length - 1] = txt;
File.WriteAllLines(txtFile, allLines);
}
}
}
///
/// 移除最后一行内容;
///
/// 文件路径+文件名(包含扩展名)
public static void RemoveLastLine(string txtFile)
{
if (File.Exists(txtFile)) //判断文件是否存在
{
string[] allLines = File.ReadAllLines(txtFile);
if (allLines.Length > 0)
{
Array.Resize(ref allLines, allLines.Length - 1);
File.WriteAllLines(txtFile, allLines);
}
}
}
}
}