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