Táto stránka pre svoju správnu funkčnosť vyžaduje súbory cookies. Slúžia na authentifikáciu návštevníka, analýzu návštevnosti a reklamnú personalizáciu.
logo Knowledge base KB
mobile

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

Codeblog