automatic path separator correction

This commit is contained in:
Timerix22 2023-02-04 01:59:02 +06:00
parent ac1b8ad4f1
commit 1ab9a50019
2 changed files with 33 additions and 43 deletions

View File

@ -2,11 +2,12 @@
public static class Directory
{
public static bool Exists(string dir) => System.IO.Directory.Exists(dir);
public static bool Exists(string dir) => System.IO.Directory.Exists(Path.FixSeparators(dir));
/// создает папку, если её не существует
public static void Create(string dir)
{
dir = Path.FixSeparators(dir);
if (!Exists(dir))
{
// проверяет существование папки, в которой нужно создать dir
@ -46,26 +47,11 @@ public static class Directory
}
/// удаляет папку со всеми подпапками и файлами
public static void Delete(string dir)
{
var subdirs = new List<string>();
List<string> files = GetAllFiles(dir, ref subdirs);
for (int i = 0; i < files.Count; i++)
File.Delete(files[i]);
for (int i = subdirs.Count - 1; i >= 0; i--)
{
Log($"deleting {subdirs[i]}");
if (Exists(subdirs[i]))
System.IO.Directory.Delete(subdirs[i], true);
}
Log($"deleting {dir}");
if (Exists(dir))
System.IO.Directory.Delete(dir, true);
}
public static void Delete(string dir) => System.IO.Directory.Delete(Path.FixSeparators(dir), true);
public static string[] GetFiles(string dir) => System.IO.Directory.GetFiles(dir);
public static string[] GetFiles(string dir, string searchPattern) => System.IO.Directory.GetFiles(dir, searchPattern);
public static string[] GetDirectories(string dir) => System.IO.Directory.GetDirectories(dir);
public static string[] GetFiles(string dir) => System.IO.Directory.GetFiles(Path.FixSeparators(dir));
public static string[] GetFiles(string dir, string searchPattern) => System.IO.Directory.GetFiles(Path.FixSeparators(dir), searchPattern);
public static string[] GetDirectories(string dir) => System.IO.Directory.GetDirectories(Path.FixSeparators(dir));
/// выдает список всех файлов
public static List<string> GetAllFiles(string dir)
@ -100,21 +86,11 @@ public static class Directory
public static void CreateSymlink(string sourceName, string symlinkName)
{
sourceName = Path.FixSeparators(sourceName);
symlinkName = Path.FixSeparators(symlinkName);
if (symlinkName.Contains(Path.Sep))
Create(symlinkName.Remove(symlinkName.LastIndexOf(Path.Sep)));
if (!Symlink.CreateSymbolicLink(symlinkName, sourceName, Symlink.SymlinkTarget.Directory))
throw new InvalidOperationException($"some error occured while creating symlink\nDirectory.CreateSymlink({symlinkName}, {sourceName})");
}
/// copies directory with symlinks instead of files
public static int SymCopy(string srcdir, string newdir)
{
List<string> files = GetAllFiles(srcdir);
if (!srcdir.EndsWith(Path.Sep)) srcdir += Path.Sep;
if (!newdir.EndsWith(Path.Sep)) newdir += Path.Sep;
int i = 0;
for (; i < files.Count; i++)
File.CreateSymlink(files[i], files[i].Replace(srcdir, newdir));
return i;
}
}

View File

@ -4,13 +4,14 @@ namespace DTLib.Filesystem;
public static class File
{
/// возвращает размер файла в байтах
public static long GetSize(string file) => new System.IO.FileInfo(file).Length;
public static long GetSize(string file) => new System.IO.FileInfo(Path.FixSeparators(file)).Length;
public static bool Exists(string file) => System.IO.File.Exists(file);
public static bool Exists(string file) => System.IO.File.Exists(Path.FixSeparators(file));
/// если файл не существует, создаёт файл с папками из его пути и закрывает этот фвйл
public static void Create(string file)
{
file = Path.FixSeparators(file);
if (!Exists(file))
{
if (file.Contains(Path.Sep))
@ -20,18 +21,20 @@ public static class File
}
}
public static void Copy(string srcPath, string newPath, bool replace = false)
public static void Copy(string srcPath, string newPath, bool overwrite = false)
{
if (!replace && Exists(newPath))
srcPath = Path.FixSeparators(srcPath);
newPath = Path.FixSeparators(newPath);
if (!overwrite && Exists(newPath))
throw new Exception($"file <{newPath}> alredy exists");
Create(newPath);
WriteAllBytes(newPath, ReadAllBytes(srcPath));
System.IO.File.Copy(srcPath, newPath, overwrite);
}
public static void Delete(string file) => System.IO.File.Delete(file);
public static void Delete(string file) => System.IO.File.Delete(Path.FixSeparators(file));
public static byte[] ReadAllBytes(string file)
{
file = Path.FixSeparators(file);
using System.IO.FileStream stream = OpenRead(file);
int size = GetSize(file).ToInt();
byte[] output = new byte[size];
@ -45,6 +48,7 @@ public static class File
public static void WriteAllBytes(string file, byte[] content)
{
file = Path.FixSeparators(file);
using System.IO.FileStream stream = OpenWrite(file);
stream.Write(content, 0, content.Length);
stream.Close();
@ -54,6 +58,7 @@ public static class File
public static void AppendAllBytes(string file, byte[] content)
{
file = Path.FixSeparators(file);
using System.IO.FileStream stream = OpenAppend(file);
stream.Write(content, 0, content.Length);
stream.Close();
@ -61,12 +66,18 @@ public static class File
public static void AppendAllText(string file, string content) => AppendAllBytes(file, content.ToBytes(StringConverter.UTF8));
public static System.IO.FileStream OpenRead(string file) =>
Exists(file)
? System.IO.File.Open(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)
: throw new Exception($"file not found: <{file}>");
public static System.IO.FileStream OpenRead(string file)
{
file = Path.FixSeparators(file);
if (Exists(file))
return System.IO.File.Open(file, System.IO.FileMode.Open, System.IO.FileAccess.Read,
System.IO.FileShare.ReadWrite);
throw new Exception($"file not found: <{file}>");
}
public static System.IO.FileStream OpenWrite(string file)
{
file = Path.FixSeparators(file);
if (Exists(file))
Delete(file);
Create(file);
@ -74,12 +85,15 @@ public static class File
}
public static System.IO.FileStream OpenAppend(string file)
{
file = Path.FixSeparators(file);
Create(file);
return System.IO.File.Open(file, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite);
}
public static void CreateSymlink(string sourceName, string symlinkName)
{
sourceName = Path.FixSeparators(sourceName);
symlinkName = Path.FixSeparators(symlinkName);
if (symlinkName.Contains(Path.Sep))
Directory.Create(symlinkName.Remove(symlinkName.LastIndexOf(Path.Sep)));
if (!Symlink.CreateSymbolicLink(symlinkName, sourceName, Symlink.SymlinkTarget.File))