Ordner und Unter Ordner kopieren

paebels

Erfahrenes Mitglied
Hallo nun suche ich eine Funktion die mir z.B c:\Hans den kompletten Ordner kopiert inklusive Unterordner. Gibt es da was fertiges ?
Oder muss ich wirklich erst einen Ordner erstellen und recursive von Hand dadurch?
MfG

Oli


p.s c++/cli Forms
 
Hallo

danke ich werde das mal durch arbeiten , der letzte Teil sieht verständlich aus für mich und ist auch in c++ umzustzen für mich.
MFG
Oli
 
Hallo.
Also falls du noch keine Lösung hast....

Du musst einfach eine Schleife machen, mit der musst du dann gucken, ob sich in dem Ordner den du kopieren willst Unterordner befinden, wenn ja soll er die Funktion nochmal starten, bis sich keine Unterordner in dem Ordner befinden, dann musst du die Dateien kopieren.
So muss die Schleife dann mit allen Unterordnern und UnterUnterordner etc. verfahren, so habe ich das mal gemacht.

mfg Cshark
 
Hallo,

man muss zwar die Ordner selbst erzeugen und auch die Dateien alle selbst kopieren, aber mit den Mitteln der Directory- und File-Klasse wird der Code doch sehr minimal:

C#:
public void CopyFolder(string strSource, string strDst)
{   
    // Ordnerstruktur erzeugen             
    foreach( string str in Directory.GetDirectories(strSource, "*", SearchOption.AllDirectories) )
    {
        Directory.CreateDirectory( Path.Combine(strDst, str.Substring(strSource.Length +1)) );
    }                

    // Dateien kopieren
    foreach( string str in Directory.GetFiles(strSource, "*.*", SearchOption.AllDirectories) )
    {
        File.Copy( str, Path.Combine(strDst, str.Substring(strSource.Length + 1)) );
    }
}
Gruß
MCoder
 
Hallo,

man muss zwar die Ordner selbst erzeugen und auch die Dateien alle selbst kopieren, aber mit den Mitteln der Directory- und File-Klasse wird der Code doch sehr minimal:

C#:
public void CopyFolder(string strSource, string strDst)
{   
    // Ordnerstruktur erzeugen             
    foreach( string str in Directory.GetDirectories(strSource, "*", SearchOption.AllDirectories) )
    {
        Directory.CreateDirectory( Path.Combine(strDst, str.Substring(strSource.Length +1)) );
    }                

    // Dateien kopieren
    foreach( string str in Directory.GetFiles(strSource, "*.*", SearchOption.AllDirectories) )
    {
        File.Copy( str, Path.Combine(strDst, str.Substring(strSource.Length + 1)) );
    }
}
Gruß
MCoder
Hallo
Und das nun in c++ wo ich keine foreach habe bitte ;-)
Wo kommt Path her in dem Beispiel?
MFG
oli
 
Mit dem C++/CLI kenne ich mich nun überhaupt nicht aus :)

Bei den Directory.Get... - Methoden bekommst du aber doch ein "array<String^>^" zurück, dem man bestimmt auch mit "for" zu Leibe rücken kann. Irgendwo wird sich da bestimmt die Array-Größe abfragen lassen.

'Path' und 'Directory' kommen aus dem IO-Namespace.

Gruß
MCoder
 
Es gibt eine Möglichkeit, die jetzt vielleicht nicht ganz sauber aussieht, aber ohne Weiteres verwendbar ist...
Du fügst einen Verweis auf "Microsoft.VisualBasic.dll" hinzu und machst es folgendermaßen:
C++:
using namespace Microsoft::VisualBasic::FileIO;

FileSystem::CopyDirectory("c:\\quelle", "c:\\ziel");
 
Natürlich haste for each auch in C++/CLI.
Etwa so :
void copyDirectory(String ^src, String ^dest) {
for each (String ^str in Directory::GetDirectories(src,"*",SearchOption::AllDirectories))
{
Directory::CreateDirectory(Path::Combine(dest, str->Substring(src->Length +1)));
}
}
Wird nur auseinander geschrieben.
Gruß littles
 
Zurück