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 ""; } } } }