Compare commits

..

No commits in common. "826c11aa55da3194c1a42e6c7a9c2f7f2774be9f" and "4c08ad0064c89b86990fc1ce278bb856e44e6371" have entirely different histories.

6 changed files with 102 additions and 78 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<!--package info-->
<PackageId>DTLib</PackageId>
<Version>1.4.3</Version>
<Version>1.4.1</Version>
<Authors>Timerix</Authors>
<Description>Library for all my C# projects</Description>
<RepositoryType>GIT</RepositoryType>

View File

@ -19,7 +19,6 @@ public static class Directory
System.IO.Directory.CreateDirectory(dir.Str);
}
/// копирует все файлы и папки
public static void Copy(IOPath sourceDir, IOPath newDir, bool owerwrite)
{
@ -55,7 +54,7 @@ public static class Directory
Delete(target_path);
else throw new Exception($"directory {target_path} already exists");
}
else Create(target_path.ParentDir());
else Directory.Create(target_path.ParentDir());
System.IO.Directory.Move(current_path.Str, target_path.Str);
}
@ -87,9 +86,9 @@ public static class Directory
all_subdirs = new List<IOPath>();
return GetAllFiles_internal(dir, all_subdirs);
}
private static List<IOPath> GetAllFiles_internal(IOPath dir, List<IOPath>? all_subdirs)
{
bool rememberSubdirs = all_subdirs is not null;
var all_files = new List<IOPath>();
IOPath[] cur_files = GetFiles(dir);
for (int i = 0; i < cur_files.Length; i++)
@ -97,12 +96,20 @@ public static class Directory
IOPath[] cur_subdirs = GetDirectories(dir);
for (int i = 0; i < cur_subdirs.Length; i++)
{
if(rememberSubdirs)
all_subdirs?.Add(cur_subdirs[i]);
all_files.AddRange(GetAllFiles_internal(cur_subdirs[i], all_subdirs));
}
return all_files;
}
public static IOPath GetCurrent() => new IOPath(System.IO.Directory.GetCurrentDirectory(), true);
public static string GetCurrent() => System.IO.Directory.GetCurrentDirectory();
public static void CreateSymlink(string sourcePath, string symlinkPath)
{
if (symlinkPath.Contains(Path.Sep))
Create(Path.ParentDir(symlinkPath));
if (!Symlink.CreateSymbolicLink(symlinkPath, sourcePath, Symlink.SymlinkTarget.Directory))
throw new InvalidOperationException($"some error occured while creating symlink\nDirectory.CreateSymlink({symlinkPath}, {sourcePath})");
}
}

View File

@ -1,7 +1,4 @@
using FileMode = System.IO.FileMode;
using FileAccess = System.IO.FileAccess;
namespace DTLib.Filesystem;
namespace DTLib.Filesystem;
public static class File
{
@ -17,22 +14,23 @@ public static class File
Directory.Create(file.ParentDir());
using System.IO.FileStream stream = System.IO.File.Create(file.Str);
stream.Close();
}
public static void Copy(IOPath srcPath, IOPath newPath, bool overwrite)
{
if (Exists(newPath))
{
if (overwrite)
Delete(newPath);
if(overwrite) System.IO.File.Delete(newPath.Str);
else throw new Exception($"file <{newPath}> alredy exists");
}
else Directory.Create(newPath.ParentDir());
using var srcFile = OpenRead(srcPath);
using var newFile = OpenWrite(newPath);
using var srcFile=System.IO.File.Open(srcPath.Str, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
using var newFile=System.IO.File.Open(newPath.Str, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite);
srcFile.CopyTo(newFile);
srcFile.Close();
newFile.Flush();
newFile.Close();
}
public static void Move(IOPath current_path, IOPath target_path, bool overwrite)
@ -44,7 +42,6 @@ public static class File
else throw new Exception($"file {target_path} already exists");
}
else Directory.Create(target_path.ParentDir());
System.IO.File.Move(current_path.Str, target_path.Str);
}
@ -52,11 +49,13 @@ public static class File
public static byte[] ReadAllBytes(IOPath file)
{
using System.IO.FileStream stream = OpenRead(file);
int size = GetSize(file).ToInt();
byte[] output = new byte[size];
if (stream.Read(output, 0, size) < size)
throw new Exception("can't read all bytes");
stream.Close();
return output;
}
@ -66,37 +65,47 @@ public static class File
{
using System.IO.FileStream stream = OpenWrite(file);
stream.Write(content, 0, content.Length);
stream.Close();
}
public static void WriteAllText(IOPath file, string content) =>
WriteAllBytes(file, content.ToBytes(StringConverter.UTF8));
public static void WriteAllText(IOPath file, string content) => WriteAllBytes(file, content.ToBytes(StringConverter.UTF8));
public static void AppendAllBytes(IOPath file, byte[] content)
{
using System.IO.FileStream stream = OpenAppend(file);
stream.Write(content, 0, content.Length);
stream.Close();
}
public static void AppendAllText(IOPath file, string content) =>
AppendAllBytes(file, content.ToBytes(StringConverter.UTF8));
public static void AppendAllText(IOPath file, string content) => AppendAllBytes(file, content.ToBytes(StringConverter.UTF8));
public static System.IO.FileStream OpenRead(IOPath file)
{
if (!Exists(file))
throw new Exception($"file not found: <{file}>");
return System.IO.File.Open(file.Str, FileMode.Open, FileAccess.Read,
return System.IO.File.Open(file.Str, System.IO.FileMode.Open, System.IO.FileAccess.Read,
System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete);
}
public static System.IO.FileStream OpenWrite(IOPath file)
{
Directory.Create(file.ParentDir());
return System.IO.File.Open(file.Str, FileMode.Create, FileAccess.Write, System.IO.FileShare.Read);
if (Exists(file))
Delete(file);
Create(file);
return System.IO.File.Open(file.Str, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, System.IO.FileShare.Read);
}
public static System.IO.FileStream OpenAppend(IOPath file)
{
Directory.Create(file.ParentDir());
return System.IO.File.Open(file.Str, FileMode.Append, FileAccess.Write, System.IO.FileShare.Read);
Create(file);
return System.IO.File.Open(file.Str, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.Read);
}
public static void CreateSymlink(IOPath sourcePath, IOPath symlinkPath)
{
if (symlinkPath.Contains(Path.Sep))
Directory.Create(symlinkPath.ParentDir());
if (!Symlink.CreateSymbolicLink(symlinkPath.Str, sourcePath.Str, Symlink.SymlinkTarget.File))
throw new InvalidOperationException($"some error occured while creating symlink\nFile.CreateSymlink({symlinkPath}, {sourcePath})");
}
}

View File

@ -40,18 +40,18 @@ public readonly struct IOPath
return new string(fixed_path);
}
public static IOPath[] ArrayCast(string[] a, bool separatorsFixed=false)
public static IOPath[] ArrayCast(string[] a, bool correct_separators=false)
{
IOPath[] b = new IOPath[a.Length];
for (int i = 0; i < a.Length; i++)
b[i] = new IOPath(a[i], separatorsFixed);
b[i] = new IOPath(a[i], correct_separators);
return b;
}
public static IOPath[] ListCast(IList<string> a, bool separatorsFixed=false)
public static IOPath[] ListCast(IList<string> a, bool correct_separators=false)
{
IOPath[] b = new IOPath[a.Count];
for (int i = 0; i < a.Count; i++)
b[i] = new IOPath(a[i], separatorsFixed);
b[i] = new IOPath(a[i], correct_separators);
return b;
}

View File

@ -25,19 +25,14 @@ public static class Path
char c = r[i];
switch (c)
{
case '\n':
case '\r':
case ':':
case ';':
case '\n': case '\r':
case ':': case ';':
break;
case '/':
case '\\':
case '/': case '\\':
b.Append('-');
break;
case '<':
case '>':
case '?':
case '|':
case '<': case '>':
case '?': case '|':
b.Append('_');
break;
case '"':
@ -51,7 +46,6 @@ public static class Path
break;
}
}
return new IOPath(b.ToString(), true);
}
@ -77,7 +71,6 @@ public static class Path
}
else needSeparator[i] = false;
}
lengthSum += parts[parts.Length-1].Length;
var buffer = new char[lengthSum];
parts[0].Str.CopyTo(buffer, 0);

View File

@ -0,0 +1,15 @@
using System.Runtime.InteropServices;
namespace DTLib.Filesystem;
internal class Symlink
{
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
internal static extern bool CreateSymbolicLink(string symlinkName, string sourceName, SymlinkTarget type);
internal enum SymlinkTarget
{
File,
Directory
}
}