build/FileUtility.cs (69 lines of code) (raw):
using System;
using System.IO;
using System.IO.Abstractions;
using System.Text;
namespace Build
{
public static class FileUtility
{
private static IFileSystem _default = new FileSystem();
private static IFileSystem _instance;
public static IFileSystem Instance
{
get { return _instance ?? _default; }
set { _instance = value; }
}
public static void EnsureDirectoryExists(string path)
{
if (!Instance.Directory.Exists(path))
{
Instance.Directory.CreateDirectory(path);
}
}
public static void Write(string path, string contents, Encoding encoding = null)
{
if (path == null)
{
throw new ArgumentNullException(nameof(path));
}
if (contents == null)
{
throw new ArgumentNullException(nameof(contents));
}
Encoding utf8WithoutBom = new UTF8Encoding(false);
encoding = encoding ?? utf8WithoutBom;
EnsureDirectoryExists(Path.GetDirectoryName(path));
Stream fileStream = OpenFile(path, FileMode.Create, FileAccess.Write, FileShare.Read);
var writer = new StreamWriter(fileStream, encoding, 4096);
writer.Write(contents);
writer.Close();
fileStream.Close();
}
public static string ReadAllText(string path) => Instance.File.ReadAllText(path);
public static Stream OpenFile(string path, FileMode mode, FileAccess access = FileAccess.ReadWrite, FileShare share = FileShare.None)
{
return Instance.File.Open(path, mode, access, share);
}
public static void CopyFile(string sourcePath, string targetPath)
{
File.Copy(sourcePath, targetPath, true);
}
public static void CopyDirectory(string sourcePath, string targetPath)
{
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
foreach (string dirPath in Instance.Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
{
Instance.Directory.CreateDirectory(dirPath.Replace(sourcePath, targetPath));
}
foreach (string filePath in Instance.Directory.GetFiles(sourcePath, "*.*", SearchOption.AllDirectories))
{
Instance.File.Copy(filePath, filePath.Replace(sourcePath, targetPath), true);
}
}
public static bool FileExists(string path) => Instance.File.Exists(path);
public static bool DirectoryExists(string path) => Instance.Directory.Exists(path);
}
}