Entwickler-Ecke

Basistechnologien - Rekursive Schleife


lodibach - Mi 22.09.10 14:53
Titel: Rekursive Schleife
Hallo, ich möchte ein Programm programmieren, mit dem man Dateien jeder Art aus Unterordnern in einen Ausgabe Ordner erst kopiert & dann löscht. Das Programm soll also rekursiv arbeiten und so jeden Ordner, nachdem er alle Dateien daraus verschoben hat, löschen.
Wäre dankbar für Hilfe.


Christian S. - Mi 22.09.10 14:56

Hallo!

Wo genau liegt denn jetzt das Problem? :-)

Grüße
Christian


bakachan - Mi 22.09.10 14:56

Und was genau ist jetzt dein Problem?


lodibach - Mi 22.09.10 15:05

ich brauche den code für die schleife ;)
tschuldigung ;) vergessen ;):D


Necaremus - Mi 22.09.10 15:36

prinzipiell sollten dir Rekursionen ja bekannt sein, sonst würdest du danach ja nicht fragen^^
und es ist hier eher selten, dass als "hilfe" der fertige code geliefert wird :p

überleg doch am besten selber erstmal, wie man das am besten lösen kann und versuch es!
wenn du dann scheiterst kannst du ja deinen code posten und dann kann man dir ja immer noch helfen ;)

prinzipiel würd ich sagen sollte es so aussehen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
myRe(DirInfo dIParent){
foreach (dirInfo in diParent)
{
  foreach (file in dirInfo)
  {
    copy(file);
    delete(file);
  }
  myRe(dirInfo)
}}


lodibach - Mi 22.09.10 17:15

mein Code:

C#-Quelltext
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:
      public static void DeleteFileSystemInfo(FileSystemInfo oFileSystemInfo, string CopyPath, bool bDelete)
      {
         oFileSystemInfo.Attributes = FileAttributes.Normal;
         var oDirInfo = oFileSystemInfo as DirectoryInfo;

         if (oDirInfo != null)
         {
            foreach (var oDirEntry in oDirInfo.GetFileSystemInfos())
            {
               DeleteFileSystemInfo(oDirEntry, CopyPath, bDelete);
            }
         }

         //try
         //{
            if (oFile.Name.EndsWith(".mp3") == true)
            { 
               oFile.CopyTo(CopyPath);
               oFile.Delete();
            }
            else
            {
               if (bDelete == true)
               {
                  oFile.Delete();
               }
            }
         //}
         //catch
         //{
         //}
      }


mein Problem:
wie bekomm ich nun meine oFile?
wie kann ich diese bestimmen?

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


jaenicke - Mi 22.09.10 20:21

Wie meinst du das? Du gehst mit der foreach Schleife doch schon alle Dateien durch.

Da musst du jetzt doch nur noch auch etwas damit machen, zum Beispiel den Dateinamen abfragen.

Kann es sein, dass du einfach Code irgendwo kopiert hast und keine Ahnung hast was der macht? Dann solltest du das einmal herausfinden, z.B. mit der Dokumentation:
http://msdn.microsoft.com/en-us/library/3xy7db0w.aspx
http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.aspx
http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx


danielf - Do 23.09.10 08:19

Hallo,

das Framework bietet schon fertige rekursive Dateiverwaltungsfunktionen an. So kannst du mit Directory.GetFiles [http://msdn.microsoft.com/de-de/library/ms143316.aspx] dir alle Dateien (inklusive Unterordner) mit einem bestimmten Pattern bekommen. Darüber musst du nur noch iterieren und kopieren/bewegen. Am Enden den Root-Ordner löschen und fertig.

Gruß


Yogu - Fr 24.09.10 21:43

user profile iconlodibach hat folgendes geschrieben Zum zitierten Posting springen:
Hallo, ich möchte ein Programm programmieren, mit dem man Dateien jeder Art aus Unterordnern in einen Ausgabe Ordner erst kopiert & dann löscht.

Erst kopieren, dann löschen - du meinst verschieben?

Wenn das Zielverzeichnis auf dem gleichen Laufwerk liegt wie das Quellverzeichnis, kannst du die Methode System.IO.Directory.Move [http://msdn.microsoft.com/de-de/library/system.io.directory.move.aspx] verwenden.