Hey, also ich schreibe gerade ein Programm das es mir ermöglicht ein USB-Laufwerk anzugeben und von dort werden dann in einem bestimmten Ordner auf C: abgespeichert. Das kopieren von einzelnen Datein funktioniert nur das mit den Ordnern nicht ganz.
In den Variablen OrdnerOri und Ordnerneu stehen die richtigen Werte. Ich hab mich auch der einfachshalthalber an VB bedient ^^.
Hier mal ein Auszug aus dem Code für das kopieren der einzelnen Datein:
DirectoryInfo oldDir = new DirectoryInfo(pfad2);
foreach (FileInfo file in oldDir.GetFiles())
{
string pfad = file.FullName;
string ziel = ordner + "\\" + file.Name;
File.Copy(pfad, ziel);
}
und hier für das Kopieren der Ordner:
DirectoryInfo oldDir2 = new DirectoryInfo(pfad2);
oldDir2.GetDirectories();
foreach (DirectoryInfo file2 in oldDir2.GetDirectories())
{
string OrdnerOri = file2.FullName;
string Ordnerneu = ordner + "\\" + file2.FullName;
FileSystem.CopyDirectory(OrdnerOri, Ordnerneu);
}
Was mache ich falsch? Er springt ab FileSystem.CopyDirectory(OrdnerOri, Ordnerneu);
in mein Try-Catch.
Ich hoff ihr findet den Fehler.
Neuling
Hallo C#_Neuling,
Er springt ab " FileSystem.CopyDirectory(OrdnerOri, Ordnerneu);" in mein Try-Catch.
Dann schaue dir an, welche Exception geworfen wird - diese sollte dich mit genügend Informationen versorgen, das Probelm selbst zu lösen.
Schaue auch mal die Pfade im Debugger an - und verwende besser Path.Combine statt Stringverkettung, um sie zusammenzubauen.
Statt der VB-Methode würde ich an deiner Stelle aber besser [Snippet] Verzeichnisse und Dateien rekursiv durchlaufen verwenden und dann alles selber kopieren - die Ordner musst du dann aber selbst via Directory.Create erstellen.
Als Fehler kommt "Das angegebene Pfadformat wird nicht unterstützt."
Die Pfäde sind wie ich finde ok, im String OrdnerOri ( soll der urspungsordner zum sichern sein) steht z.b. E:\Datei und im String Ordnerneu (dort wohin die Datein kopiert werden.) steht C:\Sicherung\Sicherumg vom 18.09.2011\Datei .
Was mir gerade eingefallen ist, wenn ich ihm direkt einen Ordner zum kopieren gebe, kopiert er alles sauber. Es hängt nur daran ihn sich selber zu "suchen".
Anstatt welcher Stringverkettung soll ich Path.Combine probieren?
Neuling
Anstatt welcher Stringverkettung soll ich Path.Combine probieren?
U.a. statt:
ordner + "\\" + file.Name;
//Besser:
Path.Combine(ordner, file.Name);
Die Pfäde sind wie ich finde ok
Lasse sie dir am besten mal zu Debugginzwecken ausgeben bzw. stelle sicher, dass Directory.Exists(...) wirklich wahr ist.
"E:\Datei" ist bei dir auch wirklich ein Ordner?
Die Pfäde sind wie ich finde ok, im String OrdnerOri ( soll der urspungsordner zum sichern sein) steht z.b. E:\Datei und im String Ordnerneu (dort wohin die Datein kopiert werden.) steht C:\Sicherung\Sicherumg vom 18.09.2011\Datei .
Hallo C#_Neuling,
verkette mal den Odner nicht mit Punkten sondern mit "_" oder sowas...
also aus "Sicherumg vom 18.09.2011" --> "Sicherumg vom 18_09_2011"...nicht, dass er davon ausgeht, das Punkte ein Dateiendung einleiten.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Danke, ich werds schnell probieren.
Ich habs gerade nochmal getestet und es steht in den Variablen ein Ordner drin.
Den Ordner in den es Kopieren soll exestiert auch immer. Es kommt jedesmal bevor der anfängt zu kopieren die bestätigung das der Ordner erfolgreich erstellt wurde.
@Coffeebean, nein habs gerade probiert und hilft nicht. Das Datum wird automatisch durch Datetime eingetragen.
@Coffeebean, nein habs gerade probiert und hilft nicht. Das Datum wird automatisch durch Datetime eingetragen.
Das kannst du ja auch durch .ToString("dd_MM_yyyy") modifizieren. Aber gut, wenns auch nicht hilft.
Ansonsten schliesse ich mich mit meinen Vorschlägen winSharp93 an...
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
string Ordnerneu = ordner + "\\" + file2.FullName;
Hallo,
Du setzt "Ordnerneu" aus "ordner" und "file2.FullName" zusammen, d.h. mitten im Pfad erscheint plötzlich ein Laufwerksbuchstabe (der von file2, wie du sagtest z.B. E:\), daher die Exception, dass es sich um ein ungültiges Pfadformat handelt.
LG Karim
Danke, das war der Fehler. Jetzt kopiert er mir mit GetDirectories() alle Datein in den Ordner SystemIODirectoryINFO[] .
Jetzt muss ich nur noch es so hinbiegen das er die Ordner mit kopiert und der SystemIODirectoryInfo[] Ordner erstellt wird.
Habt ihr evtl eine Idee wie ich das hinbekommen kann?
Neuling
Jetzt kopiert er mir mit GetDirectories() alle Datein in den Ordner SystemIODirectoryINFO[] .
Du hast einen Ordner, der so heisst?
winSharp93 hat oben schon auf den "Verzeichnisse rekursiv durchlaufen"-Thread in den Snippets hingewiesen. Schau dir das mal an. Somit erkennst du, wann eine Datei zu behandeln ist und wann ein Ordner. Demensprechend kannst du Dateien kopieren oder erst mit der Directory-Klasse einen Ordner erstellen, in den du dann die Dateien hineinkopierst.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Einen Ordner kannst du gar nicht kopieren, du legst ihn einfach mit der Directory.CreateDirectory-Methode an.
Weeks of programming can save you hours of planning
Somit sollte dann auch alles gesagt sein; da der Thread immer mehr den Anschein erweckt, dass dir die Grundlagen fehlen ==> Geschlossen.