using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace ReleaseHelper.Utils
{
public static class FileExtensions
{
///
/// 生成文件的md5
///
///
///
private static string FilenameMutexKey(string filename)
{
return Functions.GenMd5(filename);
}
///
/// 读取所有行
///
///
///
///
public static string[] ReadAllLines(string filename, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
string key = FilenameMutexKey(filename);
string[] txt = { };
void act()
{
if (File.Exists(filename))
{
txt = File.ReadAllLines(filename, encoding);
}
}
MutexExtensions.Exec(key, act);
return txt;
}
///
/// 读取所有文本
///
///
///
///
public static string ReadAllText(string filename, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
string key = FilenameMutexKey(filename);
string txt = string.Empty;
void act()
{
if (File.Exists(filename))
{
txt = File.ReadAllText(filename, encoding);
}
}
MutexExtensions.Exec(key, act);
return txt;
}
///
/// 写入所有文本
///
///
///
///
public static void WriteAllText(string filename, string txt, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
string key = FilenameMutexKey(filename);
CheckDirectory(Path.GetDirectoryName(filename), true);
void act()
{
File.WriteAllText(filename, txt, encoding);
}
MutexExtensions.Exec(key, act);
}
///
/// 写入二进制值
///
///
///
public static void WriteBytes(string filename, byte[] bytes)
{
if (bytes != null)
{
string key = FilenameMutexKey(filename);
CheckDirectory(Path.GetDirectoryName(filename), true);
void act()
{
File.WriteAllBytes(filename, bytes);
}
MutexExtensions.Exec(key, act);
}
}
///
/// 读取所有二进制
///
///
///
public static byte[] ReadBytes(string filename)
{
string key = FilenameMutexKey(filename);
byte[] txt = default;
void act()
{
if (File.Exists(filename))
{
txt = File.ReadAllBytes(filename);
}
}
MutexExtensions.Exec(key, act);
return txt;
}
///
/// 写入所有行
///
///
///
///
public static void WriteAllLines(string filename, string[] txt, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
string key = FilenameMutexKey(filename);
CheckDirectory(Path.GetDirectoryName(filename), true);
void act()
{
File.WriteAllLines(filename, txt, encoding);
}
MutexExtensions.Exec(key, act);
}
///
/// 添加所有文本
///
///
///
///
public static void AppendAllText(string filename, string txt, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
string key = FilenameMutexKey(filename);
CheckDirectory(Path.GetDirectoryName(filename), true);
void act()
{
File.AppendAllText(filename, txt, encoding);
}
MutexExtensions.Exec(key, act);
}
///
/// 检查目录是否存在,如果不存在,将根据条件创建或不创建
///
///
/// 如果目录不存在,是否创建
///
public static bool CheckDirectory(string p, bool create)
{
bool res = false;
if (!string.IsNullOrEmpty(p))
{
res = Directory.Exists(p);
if (!res && create)
{
Directory.CreateDirectory(p);
res = true;
}
}
return res;
}
///
/// 在文件管理器中打开文件夹并选择文件
///
///
public static bool OpenFileInExplore(string filename)
{
bool res = false;
try
{
System.Diagnostics.Process.Start("Explorer.exe", $"/select, {filename}");
res = true;
}
catch
{
}
return res;
}
///
/// 获取制定路径文件的md5值
///
///
///
public static string FileMd5(string filename)
{
string res = "";
try
{
using (FileStream file = new FileStream(filename, FileMode.Open))
using (MD5 md5 = new MD5CryptoServiceProvider())
{
byte[] retVal = md5.ComputeHash(file);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
res = sb.ToString();
}
}
catch
{
}
return res;
}
}
}