tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
9835
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kieren Kieren ist offline Mitglied Bronze
    Registriert seit
    Jul 2006
    Ort
    Schwanstetten
    Beiträge
    33
    Hi
    Ich möchte in C# einen Ordner mit Inhalt kopieren

    Ich finde allerdings keinen passenden Befehl

    Code C#:
    1
    
    Directory.Move(quelle, ziel)
    verschiebt ja leider nur den Inhalt

    Die Directory-Class kann sonst alles was ich brauch nur eben nicht kopieren
    versteh des System auch nicht ganz wenn ich was verschiben kann kann ich es doch auch kopieren oder?
     
    Wer frägt ist 5min ein Trotel.
    Wer nicht frägt sein leben lang.

    "Der Typ unter mir ..." - REGELN:
    1. Man darf nur dann antworten wenn die Beschreibung von dem Typ über einem auch wirklich zutrifft
    2. Meldet sich länger als 12 Stunden keiner ist davon auszugehen das es solch einen Typen nicht gibt und es darf weiter gemacht werden
    3. Typ wird wenn gewünscht durch "User" ersetzt


    Nach dem Beschluss http://www.tutorials.de/fun-forum/24...ml#post1304688
    und Folgende



  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Kieren
    Die Directory-Class kann sonst alles was ich brauch nur eben nicht kopieren
    versteh des System auch nicht ganz wenn ich was verschiben kann kann ich es doch auch kopieren oder?
    Grundlegend unterscheided sich das Kopieren und Verschieben ziemlich. Ein Verschieben erfolgt lediglich durch eine Änderung im Dateisystem. Der Aufwand ist zudem ziemlich gering und die Aktion geht fast augenblicklich (in konstanter Zeit) vonstatten. Das Kopieren einer Datei (bzw. eines Ordners mit allen Dateien und Unterordnern) erfordert das eine komplette Kopie der Daten und der Verzeichnisstruktur in einem anderen Order erstellt wird. Deshalb ist es auch nicht möglich mit der Directory.Move Methode ein Verzeichnis bzw. eine Datei von einem Laufwerk auf ein anderes zu bewegen (es würde das Kopieren der Daten und der Struktur und letzendlich das Löschen des Originalordners erfordern).

    Eine Datei kannst du mit der Copy Methode von System.IO.File kopieren. Willst du ein Verzeichnis komplett kopieren mußt du rekursiv durch das Verzeichnis durchgehen, die Verzeichnisstruktur im Zielverzeichnis anlegen und die Dateien einzeln dorthin kopieren. \edit: {Zum Schluss mußt du dann noch alle Dateien, Unterverzeichnisse und das Verzeichnis selbst löschen.} Also löschen mußt du natürlich nur beim Verschieben, beim Kopieren natürlich nicht.

    Gruß
    Geändert von deepthroat (21.07.06 um 14:24 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Kieren Kieren ist offline Mitglied Bronze
    Registriert seit
    Jul 2006
    Ort
    Schwanstetten
    Beiträge
    33
    Danke, gleich mal ausprobieren
     
    Wer frägt ist 5min ein Trotel.
    Wer nicht frägt sein leben lang.

    "Der Typ unter mir ..." - REGELN:
    1. Man darf nur dann antworten wenn die Beschreibung von dem Typ über einem auch wirklich zutrifft
    2. Meldet sich länger als 12 Stunden keiner ist davon auszugehen das es solch einen Typen nicht gibt und es darf weiter gemacht werden
    3. Typ wird wenn gewünscht durch "User" ersetzt


    Nach dem Beschluss http://www.tutorials.de/fun-forum/24...ml#post1304688
    und Folgende



  4. #4
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Warum nicht erst mal die Suchfunktion verwenden?
    Folder Copy - Thread
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  5. #5
    Kieren Kieren ist offline Mitglied Bronze
    Registriert seit
    Jul 2006
    Ort
    Schwanstetten
    Beiträge
    33
    Zitat Zitat von Christian Kusmanow
    Warum nicht erst mal die Suchfunktion verwenden?
    Folder Copy - Thread
    danke

    Ich hatte zwar auch die Suchfunktion mit "copy" "folder" "direktory" "kopieren" "ordner"
    benutzt aber hab den Thread nicht gefunden
    oder übersehen bzw wegen falscher Programmiersprache ignoriert

    Ich hab jetzt in google eine VB.NET version gefunden
    und mach die grad zu C#

    Aber die aus dem thread schau auch gut aus mal schauen was beser

    Wenn meine c#-Funkion funktioniert lass ich euch auf jeden fall drann teilhaben
    danke fürs raussuchen von dem Thread
     
    Wer frägt ist 5min ein Trotel.
    Wer nicht frägt sein leben lang.

    "Der Typ unter mir ..." - REGELN:
    1. Man darf nur dann antworten wenn die Beschreibung von dem Typ über einem auch wirklich zutrifft
    2. Meldet sich länger als 12 Stunden keiner ist davon auszugehen das es solch einen Typen nicht gibt und es darf weiter gemacht werden
    3. Typ wird wenn gewünscht durch "User" ersetzt


    Nach dem Beschluss http://www.tutorials.de/fun-forum/24...ml#post1304688
    und Folgende



  6. #6
    Kieren Kieren ist offline Mitglied Bronze
    Registriert seit
    Jul 2006
    Ort
    Schwanstetten
    Beiträge
    33
    Erstmal die orignal VB.NET Funktion http://www.bubble-media.com/cgi-bin/...es/000026.html

    Code VB:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    
    ' Recursively copy all files and subdirectories from the
    ' specified source to the specified destination.
    Private Sub RecursiveCopyFiles( _
    ByVal sourceDir As String, _
    ByVal destDir As String, _
    ByVal fRecursive As Boolean, ByVal overWrite As Boolean)
     
    Dim i As Integer
    Dim posSep As Integer
    Dim sDir As String
    Dim aDirs() As String
    Dim sFile As String
    Dim aFiles() As String
     
    ' Add trailing separators to the supplied paths if they don't exist.
    If Not sourceDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
    sourceDir &= System.IO.Path.DirectorySeparatorChar
    End If
     
    If Not destDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()) Then
    destDir &= System.IO.Path.DirectorySeparatorChar
    End If
     
    ' Recursive switch to continue drilling down into dir structure.
    If fRecursive Then
     
    ' Get a list of directories from the current parent.
    aDirs = System.IO.Directory.GetDirectories(sourceDir)
     
    For i = 0 To aDirs.GetUpperBound(0)
     
    ' Get the position of the last separator in the current path.
    posSep = aDirs(i).LastIndexOf(@"\")
     
    ' Get the path of the source directory.
    sDir = aDirs(i).Substring((posSep + 1), aDirs(i).Length - (posSep + 1))
     
    ' Create the new directory in the destination directory.
    System.IO.Directory.CreateDirectory(destDir + sDir)
     
    ' Since we are in recursive mode, copy the children also
    RecursiveCopyFiles(aDirs(i), (destDir + sDir), fRecursive, overWrite)
    Next
     
    End If
     
    ' Get the files from the current parent.
    aFiles = System.IO.Directory.GetFiles(sourceDir)
     
     
    ' Copy all files.
    For i = 0 To aFiles.GetUpperBound(0)
     
    ' Get the position of the trailing separator.
    posSep = aFiles(i).LastIndexOf(@"\")
     
    ' Get the full path of the source file.
    sFile = aFiles(i).Substring((posSep + 1), aFiles(i).Length - (posSep + 1))
    Try
     
     
    ' Copy the file.
    System.IO.File.Copy(aFiles(i), destDir + sFile, False)
    addToConsoleWindow("Copied " & sFile & " to " & destDir)
    Catch ex As Exception
    If overWrite = False Then
    errorBoxShow(ex.Message)
    addToConsoleWindow("Skipping..." & ex.Message)
    Else
    System.IO.File.Copy(aFiles(i), destDir + sFile, True)
    addToConsoleWindow("Overwriting old " & sFile & " in " & destDir)
    End If
     
    End Try
    Next i
     
     
     
    End Sub


    Und jetzt noch die auf C# umgebaute Funktion
    Code C#:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    
        /*Recursively copy all files and subdirectories from the
        specified source to the specified destination.*/
        static void RecursiveCopyFiles(string sourceDir, string destDir, bool fRecursive, bool overWrite)
        {
            int i = 0;
            int posSep = 0;
            string sDir = null;
            string[] aDirs = null;
            string sFile = null;
            string[] aFiles = null;
     
            /*Add trailing separators to the supplied paths if they don't exist.*/
            if (!sourceDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
            {
                sourceDir += System.IO.Path.DirectorySeparatorChar;
            }
     
            if (!destDir.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
            {
                destDir += System.IO.Path.DirectorySeparatorChar;
            }
     
            /*Recursive switch to continue drilling down into dir structure.*/
            if (fRecursive) 
            {
                /*Get a list of directories from the current parent.*/
                aDirs = System.IO.Directory.GetDirectories(sourceDir);
     
                for (i = 0; i<=aDirs.GetUpperBound(0); i++)
                {
                    /*Get the position of the last separator in the current path.*/
                    posSep = aDirs[i].LastIndexOf(@"\"");
     
                    /*Get the path of the source directory.*/
                    sDir = aDirs[i].Substring((posSep + 1), aDirs[i].Length - (posSep + 1));
     
                    /*Create the new directory in the destination directory.*/
                    System.IO.Directory.CreateDirectory(destDir + sDir);
        
                    /*Since we are in recursive mode, copy the children also*/
                    RecursiveCopyFiles(aDirs[i], (destDir + sDir), fRecursive, overWrite);
                }
            }
     
            
            
     
            /*Get the files from the current parent.*/
            aFiles = System.IO.Directory.GetFiles(sourceDir);
     
     
            /*Copy all files.*/
            for (i = 0; i<= aFiles.GetUpperBound(0); i++)
            {
                /*Get the position of the trailing separator.*/
                posSep = aFiles[i].LastIndexOf(@"\"");
        
                /*Get the full path of the source file.*/
                sFile = aFiles[i].Substring((posSep + 1), aFiles[i].Length - (posSep + 1));
            
                try
                {
                    /*Copy the file.*/
                    System.IO.File.Copy(aFiles[i], destDir + sFile, false);
                    Console.WriteLine("Copied " + sFile + " to " + destDir);
                }    
                catch (Exception ex)
                {   
                    if (overWrite == false) 
                    {
                        Console.WriteLine("Skipping..." + ex.Message);
                    }   
                    else
                    {
                        System.IO.File.Copy(aFiles[i], destDir + sFile, true);
                        Console.WriteLine("Overwriting old " + sFile + " in " + destDir);
                    
                    }
                }
     
            }
        }
    ACHTUNG: (@"\"") bitte durch (@"\") esrsetzen
    Sonst zerstört es aber leider des Highlight


    Ich schreib das hier auch noch in den andern Thread dann findet der nächste Suchende es eventuel auch *G*
    Geändert von Kieren (21.07.06 um 14:39 Uhr)
     
    Wer frägt ist 5min ein Trotel.
    Wer nicht frägt sein leben lang.

    "Der Typ unter mir ..." - REGELN:
    1. Man darf nur dann antworten wenn die Beschreibung von dem Typ über einem auch wirklich zutrifft
    2. Meldet sich länger als 12 Stunden keiner ist davon auszugehen das es solch einen Typen nicht gibt und es darf weiter gemacht werden
    3. Typ wird wenn gewünscht durch "User" ersetzt


    Nach dem Beschluss http://www.tutorials.de/fun-forum/24...ml#post1304688
    und Folgende



  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Der Programmierer scheint allerdings anzunehmen, das des Trennzeichen für Pfade immer ein Backslash ist. Das funktioniert dann unter Unix spätestens nicht mehr oder wenn der Benutzer den System.IO.Path.AltDirectorySeperatorChar verwendet.

    Es gibt extra Funktionen in System.IO.Path damit man nicht selbst mit irgendwelchen String-Funktionen Pfade auseinander klamüsern muß:
    • System.IO.Path.Combine
    • System.IO.Path.GetDirectoryName
    • System.IO.Path.GetFileName etc.
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    Kieren Kieren ist offline Mitglied Bronze
    Registriert seit
    Jul 2006
    Ort
    Schwanstetten
    Beiträge
    33
    Gut möglich aber des Ding wird so wie es aussieht genau 1mal laufen
    und das unter windoof

    von daher hab ich an solche Sachen nicht gedacht

    aber trotzdem danke
     
    Wer frägt ist 5min ein Trotel.
    Wer nicht frägt sein leben lang.

    "Der Typ unter mir ..." - REGELN:
    1. Man darf nur dann antworten wenn die Beschreibung von dem Typ über einem auch wirklich zutrifft
    2. Meldet sich länger als 12 Stunden keiner ist davon auszugehen das es solch einen Typen nicht gibt und es darf weiter gemacht werden
    3. Typ wird wenn gewünscht durch "User" ersetzt


    Nach dem Beschluss http://www.tutorials.de/fun-forum/24...ml#post1304688
    und Folgende



Ähnliche Themen

  1. Bilder aus anderen Ordner mit ../ordner/image2.gif richtig einbinden?
    Von Herr_M im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 6
    Letzter Beitrag: 26.11.08, 00:05
  2. Antworten: 3
    Letzter Beitrag: 22.04.07, 00:33
  3. Antworten: 1
    Letzter Beitrag: 30.01.07, 16:27
  4. Antworten: 6
    Letzter Beitrag: 21.05.06, 17:50
  5. Antworten: 3
    Letzter Beitrag: 12.06.04, 00:52