Hallo,
als erstes solltest Du
Convert.ToString an mehreren Stellen rausschmeißen: Wenn es schon ein String ist wie bei "abc" und an einen string übergeben wird, ist das völlig überflüssig. Damit wird der Code auf jeden Fall übersichtlicher. Beispiel:
C#-Quelltext
1:
| string path1 = @"D:\Projekt\Debug\Test.lbl"; |
Dann liegt Dein Hauptproblem darin, dass Du viel zu kompliziert denkst.
Du willst die Namen aller Dateien im Quellverzeichnis, aber vermutlich ohne Unterverzeichnisse. Also benutze doch dies:
C#-Quelltext
1:
| string[] sources = Directory.GetFiles(path); |
Die Methode GetFileSystemEntries liefert auch Unterverzeichnisse und anscheinend das aktuelle Verzeichnis mit "." zusätzlich; das führt dann zu:
Zitat: |
fehlermeldung:"The target file "D:\Projekt\Debug\.svn" is a directory, |
Vor dem Kopieren hast Du doch im Sicherungspfad keine Dateien, oder sie sind unwichtig.
Wozu erzeugst Du FileInfo, wenn Du es nicht benötigst und nicht benutzt? So wird doch kopiert:
C#-Quelltext
1:
| File.Copy(source, dest); |
Das wichtigste Problem reduziert sich also darauf, das Ziel richtig anzugeben. Das geht z.B. so:
C#-Quelltext
1:
| string dest = Path.Combine(path1, Path.GetFileName(sources[i])); |
Bitte beachte, dass für das Zusammensetzen eines Pfades und eines Dateinamens fast immer
Path.Combine die beste Methode ist.
Für die IndexOutOfRangeException habe ich keine sofort einleuchtende Erklärung. Aber die dürfte bei Vereinfachung des Codes sowieso wegfallen.
Viel Erfolg! Jürgen