Announcement

Collapse
No announcement yet.

Unterordnern und Inhalt kopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    ---

  • #2
    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

    Comment


    • #3
      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
      Gruss
      Cheat-Sheets for Developers Programming Quotes

      Comment


      • #4
        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.");
                    }

        Comment


        • #5
          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

          Comment


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

            ok dann werde ich mal basteln ^°

            Comment


            • #7
              ä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.
              Zuletzt editiert von C#_Kain; 09.02.2011, 13:07.

              Comment


              • #8
                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
                Zuletzt editiert von Christian Marquardt; 09.02.2011, 13:33.
                Christian

                Comment

                Working...
                X