From 861346456c203b0d942321288b57217c431e4907 Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Sat, 13 Nov 2021 22:50:17 +0300 Subject: [PATCH] added methods for symlink creation --- Filesystem/Directory.cs | 18 ++++++++++++++++-- Filesystem/File.cs | 6 ++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Filesystem/Directory.cs b/Filesystem/Directory.cs index 1358d76..330b635 100644 --- a/Filesystem/Directory.cs +++ b/Filesystem/Directory.cs @@ -136,10 +136,24 @@ namespace DTLib.Filesystem dirInfo.SetAccessControl(dirSecurity); } - public static void CreateSymlink(string symlinkName, string sourceName) + public static void CreateSymlink(string sourceName, string symlinkName) { + if (symlinkName.Contains("\\")) + Directory.Create(symlinkName.Remove(symlinkName.LastIndexOf('\\'))); if (!Symlink.CreateSymbolicLink(symlinkName, sourceName, Symlink.SymlinkTarget.Directory)) - throw new InvalidOperationException($"some error occured while creating symlink\nCreateSymlink({symlinkName}, {sourceName})"); + 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) + { + var files = Directory.GetAllFiles(srcdir); + if (!srcdir.EndsWith('\\')) srcdir += '\\'; + if (!newdir.EndsWith('\\')) newdir += '\\'; + int i = 0; + for (; i < files.Count; i++) + File.CreateSymlink(files[i], files[i].Replace(srcdir, newdir)); + return i; } } } diff --git a/Filesystem/File.cs b/Filesystem/File.cs index 88f02e5..f53d14e 100644 --- a/Filesystem/File.cs +++ b/Filesystem/File.cs @@ -75,10 +75,12 @@ namespace DTLib.Filesystem return System.IO.File.Open(file, System.IO.FileMode.Append); } - public static void CreateSymlink(string symlinkName, string sourceName) + public static void CreateSymlink(string sourceName, string symlinkName) { + if (symlinkName.Contains("\\")) + Directory.Create(symlinkName.Remove(symlinkName.LastIndexOf('\\'))); if (!Symlink.CreateSymbolicLink(symlinkName, sourceName, Symlink.SymlinkTarget.File)) - throw new InvalidOperationException($"some error occured while creating symlink\nCreateSymlink({symlinkName}, {sourceName})"); + throw new InvalidOperationException($"some error occured while creating symlink\nFile.CreateSymlink({symlinkName}, {sourceName})"); } } }