Skopírovanie celého priečinka bez rekurzie
Riešenie spočíva v získaní zoznamu podpriečinkov pomocou System.IO.Directory.GetDirectories a ich následnom vytvorení v novom umiestnení. Obdobne spracujeme aj súbory pomocou System.IO.Directory.GetFiles.Využijeme aj dve pomocné metódy AddBackslash a ChangePathRoot. Prvá menovaná ošetruje zadanú cestu k priečinku tak, aby končila na znak "\" a druhá nám v ceste súboru alebo priečinka nahradí zdrojový priečinok za cieľový.
Zdrojový kód:
using System.IO;...private static void CopyFolder(string From, string To)
{
//Pridame "\" na koniec cesty ak tam nie je
From = AddBackslash(From);
To = AddBackslash(To); //Najskor vytvorime priecinky
string[] Folders = Directory.GetDirectories(From, "*", SearchOption.AllDirectories);
foreach (string Folder in Folders)
{
string NewFolder = ChangePathRoot(Folder, From, To);
Directory.CreateDirectory(NewFolder);
} //Nasledne skopirujeme subory
string[] Files = Directory.GetFiles(From, "*", SearchOption.AllDirectories);
foreach (string FileName in Files)
{
string NewFile = ChangePathRoot(FileName, From, To);
File.Copy(FileName, NewFile, true);
}
}private static string AddBackslash(string Value)
{
if (!Value.EndsWith("\\"))
Value += "\\"; return Value;
}private static string ChangePathRoot(string Path, string OldRoot, string NewRoot)
{
return NewRoot + Path.Remove(0, OldRoot.Length);
}
Keywords: C#, Folder, Copy
{
//Pridame "\" na koniec cesty ak tam nie je
From = AddBackslash(From);
To = AddBackslash(To); //Najskor vytvorime priecinky
string[] Folders = Directory.GetDirectories(From, "*", SearchOption.AllDirectories);
foreach (string Folder in Folders)
{
string NewFolder = ChangePathRoot(Folder, From, To);
Directory.CreateDirectory(NewFolder);
} //Nasledne skopirujeme subory
string[] Files = Directory.GetFiles(From, "*", SearchOption.AllDirectories);
foreach (string FileName in Files)
{
string NewFile = ChangePathRoot(FileName, From, To);
File.Copy(FileName, NewFile, true);
}
}private static string AddBackslash(string Value)
{
if (!Value.EndsWith("\\"))
Value += "\\"; return Value;
}private static string ChangePathRoot(string Path, string OldRoot, string NewRoot)
{
return NewRoot + Path.Remove(0, OldRoot.Length);
}