using System; using System.IO; using System.Text; namespace Vinno.vCloud.Disk { public static class FileHelper { /// /// 写文件 /// /// /// /// public static void WriteFile(string fileName, string contexts, string encodingStr = "UTF-8") { try { if (!string.IsNullOrEmpty(fileName)) { using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) { Encoding textEncoding = Encoding.GetEncoding(encodingStr.ToUpper()); using (StreamWriter streamWriter = new StreamWriter(fs, textEncoding)) { streamWriter.Write(contexts); } } } } catch { // ignored } } /// /// 追加文件信息 /// /// /// /// public static void AppendWriteFile(string fileName, string contexts, string encodingStr = "UTF-8") { try { if (!string.IsNullOrEmpty(fileName)) { using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) { Encoding textEncoding = Encoding.GetEncoding(encodingStr.ToUpper()); using (StreamWriter streamWriter = new StreamWriter(fs, textEncoding)) { if (!contexts.EndsWith("\r\n")) { streamWriter.Write(contexts + "\r\n"); } else { streamWriter.Write(contexts); } } } } } catch { // ignored } } /// /// 读取文件内容 /// /// /// /// public static string ReaderFile(string fileName, string encodingStr = "UTF-8") { try { if (File.Exists(fileName)) { using (var fileStream = File.OpenRead(fileName)) { using (StreamReader reader = new StreamReader(fileStream, Encoding.GetEncoding(encodingStr))) { if (reader.Peek() != -1)//防止读不完全问题 { string txtline = reader.ReadToEnd(); return txtline; } } } } } catch { // ignored } return string.Empty; } /// /// 拷贝文件夹 /// /// /// public static void CopyFiles(string srcFolder, string targetFolder, Action progressCallback = null) { Directory.CreateDirectory(targetFolder); int finishFileCount = 0; var files = Directory.GetFiles(srcFolder); foreach (var file in files) { File.Copy(file, file.Replace(srcFolder, targetFolder), true); finishFileCount++; progressCallback?.Invoke((int)(finishFileCount / (double)files.Length * 99)); } var dirs = Directory.GetDirectories(srcFolder); foreach (var dir in dirs) { CopyFiles(dir, dir.Replace(srcFolder, targetFolder)); } progressCallback?.Invoke(100); } } }