using System.Text;
namespace Alchemy.Core.Services
{
public class FileService
{
//编码格式:去除BOM头的UTF8
private static Encoding _enc = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
///
/// 读取文件内容
///
///
///
public static string ReadAll(string strFilePath)
{
FileInfo fileInfo = new FileInfo(strFilePath);
if (fileInfo.Exists)
return File.ReadAllText(strFilePath, _enc);
else
return string.Empty;
}
///
/// 写入文件内容
///
///
///
public static void WriteAll(string strFilePath, string strContent)
{
File.WriteAllText(strFilePath, strContent, _enc);
}
public static long GetFolderSize(string folderPath)
{
DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
return GetDirectorySize(directoryInfo);
}
public static string GetFileSizeToShowTxt(string filePath)
{
FileInfo fileInfo = new FileInfo(filePath);
long byteSize = fileInfo.Length;
if (byteSize < 1024)
return $"{byteSize}B";
else
{
if (byteSize < 1024 * 1024)
return $"{byteSize / 1024}KB";
else
return $"{byteSize / 1024 / 1024}MB";
}
}
public static string GetFolderSizeToShowTxt(string folderPath)
{
DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);
long byteSize = GetDirectorySize(directoryInfo);
if (byteSize < 1024)
return $"{byteSize}B";
else
{
if (byteSize < 1024 * 1024)
return $"{byteSize / 1024}KB";
else
return $"{byteSize / 1024 / 1024}MB";
}
}
private static long GetDirectorySize(DirectoryInfo directoryInfo)
{
long size = 0;
FileInfo[] files = directoryInfo.GetFiles();
DirectoryInfo[] directories = directoryInfo.GetDirectories();
foreach (FileInfo file in files)
{
size += file.Length;
}
foreach (DirectoryInfo dir in directories)
{
size += GetDirectorySize(dir);
}
return size;
}
///
/// 写入文本内容
///
///
///
public static void WriteAllLines(string strFilePath, string[] lines)
{
File.WriteAllLines(strFilePath, lines, Encoding.UTF8);
}
public static bool Empty(DirectoryInfo directory)
{
try
{
foreach (FileInfo file in directory.GetFiles("*", SearchOption.AllDirectories))
{
try
{
File.Delete(file.FullName);
}
catch (UnauthorizedAccessException)
{
File.SetAttributes(file.FullName, FileAttributes.Normal);
File.Delete(file.FullName);
}
}
foreach (DirectoryInfo subDirectory in directory.GetDirectories())
{
DeleteFolder(subDirectory);
}
return true;
}
catch (Exception ex)
{
return false;
}
}
private static void DeleteFolder(DirectoryInfo subDirectory)
{
try
{
foreach (FileInfo file in subDirectory.GetFiles("*", SearchOption.AllDirectories))
{
try
{
File.Delete(file.FullName);
}
catch (UnauthorizedAccessException)
{
File.SetAttributes(file.FullName, FileAttributes.Normal);
File.Delete(file.FullName);
}
}
foreach (DirectoryInfo subDir in subDirectory.GetDirectories())
{
DeleteFolder(subDir);
}
subDirectory.Delete(true);
}
catch (Exception ex)
{
}
}
public static long GetFolderSize2(string folderPath)
{
DirectoryInfo directory = new DirectoryInfo(folderPath);
return directory.EnumerateFiles("*", SearchOption.AllDirectories)
.Sum(file => file.Length);
}
public static string FindOlderestFolder(string path)
{
DirectoryInfo dir = new DirectoryInfo(path);
DirectoryInfo[] directories = dir.GetDirectories();
DateTime earliestTime = DateTime.MaxValue;
DirectoryInfo earliestDir = null;
foreach (DirectoryInfo directory in directories)
{
if (directory.CreationTime < earliestTime)
{
earliestTime = directory.CreationTime;
earliestDir = directory;
}
}
if (earliestDir != null)
{
return earliestDir.FullName;
}
else
{
return "";
}
}
}
}