Laden...

Ordner kopieren funktioniert nicht richrig.

Erstellt von C#_Neuling vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.129 Views
Thema geschlossen
C
C#_Neuling Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren
Ordner kopieren funktioniert nicht richrig.

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

5.742 Beiträge seit 2007
vor 12 Jahren

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.

C
C#_Neuling Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

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

5.742 Beiträge seit 2007
vor 12 Jahren

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?

2.207 Beiträge seit 2011
vor 12 Jahren

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

C
C#_Neuling Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

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.

2.207 Beiträge seit 2011
vor 12 Jahren

@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

k
85 Beiträge seit 2008
vor 12 Jahren

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

C
C#_Neuling Themenstarter:in
6 Beiträge seit 2011
vor 12 Jahren

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

2.207 Beiträge seit 2011
vor 12 Jahren

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

5.657 Beiträge seit 2006
vor 12 Jahren

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

Hinweis von winSharp93 vor 12 Jahren

Somit sollte dann auch alles gesagt sein; da der Thread immer mehr den Anschein erweckt, dass dir die Grundlagen fehlen ==> Geschlossen.

Thema geschlossen