Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 8 von 8
  1. #1
    Aufsteiger
    Registriert seit
    08.01.2010
    Beiträge
    68

    Standard Unterordnern und Inhalt kopieren

    Hay,
    ich möchte bei meiner Anwendung von einem bekannten Pfad einen Ordner Kopieren + seinen Unterordnern und Inhalt.
    Bisher schaffe ich es die Inhalte des hauptordners zu kopieren, aber Unterordner Ignoriert er völlig.

    Danke vorweg

    F60.2

    ---
    VS 2008
    C# Windows Forms Application
    ---
    ***********************************************
    http://f602.jimdo.com

    Hi I am an apprentice, so talk to me like I was disabled.

  2. #2
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    2.021

    Standard

    Wenn du uns verrätst, wie du bisher vorgegangen bist, können wir dir vielleicht helfen. Aber so hält sich zumindest mein Eifer, über das Problem nachzudenken, in sehr engen Grenzen. Jürgen

  3. #3

    Standard

    Für das Problem könnte es eine Lösung geben (Suchmaschine @ +subdirectory +c# +copy site:msdn.microsoft.com): http://msdn.microsoft.com/de-de/library/bb762914.aspx

  4. #4
    Aufsteiger
    Registriert seit
    08.01.2010
    Beiträge
    68

    Standard

    xD stimmt schon.

    ok, recht so?

    Code:
    private void copybutton_Click_1(object sender, EventArgs e)
            {
                //Pfade definieren
                string Alt = @"quellbox.Text";
                string Neu = @"zielbox.Text";
                try
                {
                    //Dateiliste
                    string[] olddatalist = System.IO.Directory.GetFiles(Alt);
                    string[] allesAltFolder = System.IO.Directory.GetDirectories(Alt);
                    
                     for (int i = 0; i < olddatalist.Length; i++)
                    { 
                        
                          string olds = System.IO.Path.Combine(Alt, System.IO.Path.GetFileName(olddatalist[i]));
                          string news = System.IO.Path.Combine(Neu, System.IO.Path.GetFileName(olddatalist[i]));
                        
                        //
                        if (ordnercheck.Checked == true)
                        {
                            for (int f = 0; f < allesAltFolder.Length; f++)
                            {
    
                                System.IO.File.Copy(olds, news, overW);
                                string[] myList = new string[1];
                                myList[0] = "OK   |   " + news;
                                statusliste.Items.AddRange(myList);
                            }
                            if (System.IO.Directory.Exists(Alt))
                            {
                             
    //############################################
    // Hier komme ich nich weiter, kapier das irgendwie nicht.
    //############################################
                                string[] files = System.IO.Directory.GetFiles(Alt);
    
                                foreach (string s in files)
                                {
                                    string fileName = System.IO.Path.GetFileName(s);
                                    string zielFile = System.IO.Path.Combine(Neu, fileName);
                                    System.IO.File.Copy(s, zielFile, true);
    
                                    
                                    string[] myList = new string[1];
                                    myList[0] = "OK   |   " + news;
                                    statusliste.Items.AddRange(myList);
                                }   
    //##############################################
                            }
                        }
                            
                        
                        else
                        {
                            
                            {
                        
                            System.IO.File.Copy(olds, news, true);
                            string[] myList = new string[1];
                            myList[0] = "OK   |   " + news;
                            statusliste.Items.AddRange(myList);
                        
                            }
                    } 
    }
                    //-----------------------------------------------------------
                    // Ergebniss
                    //-----------------------------------------------------------
    
                    statusliste.Items.Add("Es wurden " + olddatalist.Length + " Objekte kopiert.");
                    MessageBox.Show("Übertragung abgeschlossen.");
                }
    ***********************************************
    http://f602.jimdo.com

    Hi I am an apprentice, so talk to me like I was disabled.

  5. #5
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    2.021

    Standard

    Naja, so ausführlich müsste es nicht sein, aber immer noch besser als ganz ohne Informationen.

    Der entscheidende Punkt dürfte sein, dass weder bei GetFiles noch bei GetDirectories Unterverzeichnisse berücksichtigt werden. In beiden Fällen gibt es eine Überladung, die diese einbezieht.

    Außerdem habe ich den Eindruck, dass du es dir viel zu umständlich machst.
    * Wähle das Ursprungsverzeichnis.
    * Lege das Zielverzeichnis fest.
    * Gehe rekursiv durch alle Verzeichnisse durch.
    * Hole zu jedem Verzeichnis alle Dateinamen.
    * Bestimme zu jedem Dateinamen den neuen Namen und kopiere mit File.Copy.
    Mir kommt es so vor, als wenn du viel zu viele Listen mitschleppst.

    Jürgen

  6. #6
    Aufsteiger
    Registriert seit
    08.01.2010
    Beiträge
    68

    Standard

    ^^ Danke,
    naja, jeder Azubi fängt mal kompliziert an xD

    ok dann werde ich mal basteln ^°
    ***********************************************
    http://f602.jimdo.com

    Hi I am an apprentice, so talk to me like I was disabled.

  7. #7
    Zaungast
    Registriert seit
    26.01.2011
    Beiträge
    33

    Standard ähnliches Problem

    Hallo,

    habe auch so ein ähnliches Problem.

    In diesem Code hat er mir zuerst nur den gesamten Inhalt angezogen - Unterordner incl. Inhalt vollkommen ignoriert.

    Code:
            public void Copy()
            {
                if (Directory.Exists(path01))
                {
                    if (Directory.Exists(path02))
                    {
                        string[] files = Directory.GetFiles(path01);
    
                        for (int i = 0; i < files.Length; i++)
                        {
                            string source = Path.Combine(path01, Path.GetFileName(files[i]));
                            string dest = Path.Combine(path02, Path.GetFileName(files[i]));
                            try
                            {
                                File.Copy(source, dest);
                            }
                            catch (Exception)
                            {
                                MessageBox.Show("Die Datei\r\n\n   '" + Path.GetFileName(files[i]) + "'\r\n\nist bereits vorhanden.");
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Der Dateipfad, auf welchen kopiert werden soll, existiert nicht.");
                    }
                }
                else
                {
                    MessageBox.Show("Der zu kopierende Dateipfad existiert nicht.");
                }         
            }
    Dann habe ich weiter gesucht und probiert.
    Nun bringt er mir hier nur die Meldung, dass die Files bereits vorhanden sind. Der Unterordner wird angelegt, aber keine Files kopiert.

    Code:
            public void CopySubFoldersAndFiles(DirectoryInfo folder, string sourceFolderPath, string destFolderPath)
            {
                DirectoryInfo[] subFolders = folder.GetDirectories();
    
                for (int i = 0; i < subFolders.Length; i++)
                {
                    string destSubFolderName = subFolders[i].FullName.Replace(sourceFolderPath, destFolderPath);
    
                    Directory.CreateDirectory(destSubFolderName);
    
                    CopySubFoldersAndFiles(subFolders[i], sourceFolderPath, destFolderPath);
                }
     
                if (Directory.Exists(path01))
                {
                    if (Directory.Exists(path02))
                    {
                        FileInfo[] files = folder.GetFiles();
    
                        for (int i = 0; i < files.Length; i++)
                        {
                            try
                            {
                                File.Copy(path01, path02);
                            }
                            catch (Exception)
                            {
                                MessageBox.Show("Die Datei\r\n\n   '" + files[i] + "'\r\n\nist bereits vorhanden.");
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Der Dateipfad, auf welchen kopiert werden soll, existiert nicht.");
                    }
                }
                else
                {
                    MessageBox.Show("Der zu kopierende Dateipfad existiert nicht.");
                } 
            }
    Ansprechen tue ich dies mit diesem Befehl:
    Code:
                    DirectoryInfo sourceFolder = new DirectoryInfo(path01);
                    CopySubFoldersAndFiles(sourceFolder, path01, path02);
    und ja, ist ne Windows-Forms Anwendung ;-)
    Hoffe, ihr könnt mir da etwas weiterhelfen?!

    Vielen Dank schonmal für die Antworten.
    Geändert von C#_Kain (09.02.2011 um 12:07 Uhr)

  8. #8
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.121

    Standard

    Das Schema ist bei allen Sprachen doch gleich und das Problem rekursiv zu lösen:

    Rufe die Rekursion mit einem (Start-)Directory auf
    Lese alle Dateieinträge
    Ist der Dateieintrag ein Ordner -> rufe die Rekursion auf
    ansonsten mache etwas mit der Datei

    Des Weiteren könnte es in NET einen Ersatz für
    SHFileOperation
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    geben. Das kopiert rekursiv
    Geändert von Christian Marquardt (09.02.2011 um 12:33 Uhr)
    Christian

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •