Laden...

Directory.Move-Methode: (String, String) Problem

Erstellt von vegas1665 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.292 Views
V
vegas1665 Themenstarter:in
4 Beiträge seit 2018
vor 6 Jahren
Directory.Move-Methode: (String, String) Problem

Hallo liebe Community,
ich habe ein Problem bezüglich des Code Blocks den ich aktuell verwende.
Ich möchte einen Ordner samt Inhalt in einen anderen Ordner verschieben, dazu benutze ich folgenden Code:

void datenverschiebung()
        {

            //Funktion (verschieben des Ordners & Dateien)

            string sourceDirectory = @"C:\Ordner1";
            string destinationDirectory = @"C:\Ordner2";

            try
            {
                Directory.Move(sourceDirectory, destinationDirectory);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler: " + ex);
            }

            //Funktion beendet
        }

Leider stoße ich dabei auf einen Fehler, die Exception ex zeigt folgendes an:> Fehlermeldung:

Fehler: System.IO.IOExeption: Eine Datei kann nicht erstellt werden wenn sie bereits vorhanden ist.

In dem Ordner2 befinden sich vor dem Programm Start und nach dem Programm Start so wie in der Zwischenzeit keine Dateien er ist komplett leer.

16.834 Beiträge seit 2008
vor 6 Jahren

Bekanntes Problem; der einzige Workaround hier ist jede Datei einzeln zu verschieben.
Dazu findest Du sicherlich an die Million vorhandenen Snippets im Netz; da bin ich mir sicher 😉

PS: es sind Methoden - keine Funktionen.
Funktionen sind was anderes.

V
vegas1665 Themenstarter:in
4 Beiträge seit 2018
vor 6 Jahren

Erstmal danke für deine Antwort aber ...
Ich verstehe das nicht ganz, wenn es ein bekanntes Problem ist wieso gibt es dafür keine Lösung, bzw wieso wird ein Code noch angepriesen wenn er nicht funktioniert ? Es muss doch irgendeine Lösung dazu geben, oder ist kein vollständiger Code ?

16.834 Beiträge seit 2008
vor 6 Jahren

Das Grundproblem ist, dass Dein Ziel-Ordner oder etwas darin bereits existiert. Du hälst Dich einfach nicht an die Beschreibung der Dokumentation.
Wie der Dokumentation der Move-Methode sagt, darf weder der Zielordner noch Inhalt darin existieren.

This method throws an IOException if, for example, you try to move c:\mydir to c:\public, and c:\public already exists.

Die Lösung wäre, dass Du das tust, was in der Dokumentation steht.
Willst Du das nicht, dann brauchst Du eben diesen Workaround.

Willst Du das alles nicht, dann musst Du die Win32 API von Windows umschreiben; denn .NET ist hier nichts anderes als ein Wrapper für die Windows API.

4.939 Beiträge seit 2008
vor 6 Jahren

Möchtest du evtl.


string sourceDirectory = @"C:\Ordner1";
string destinationDirectory = @"C:\Ordner2\Ordner1";

Directory.Move(sourceDirectory, destinationDirectory);

(also, daß "Ordner1" ein neuer Unterordner von "Ordner2" wird)?

V
vegas1665 Themenstarter:in
4 Beiträge seit 2018
vor 6 Jahren

Okay dann habe ich mich wohl verlesen, aber wenn der Zielordner nicht existieren darf in welchem Beispiel würde es denn dann Sinn machen diese Methode zu benutzen ? Ich könnte ja nicht einmal von Ordner A in C:/ etwas schreiben weil das ja auch in einem Ordner ist.

V
vegas1665 Themenstarter:in
4 Beiträge seit 2018
vor 6 Jahren

Okay ja danke dir, das funktioniert dann auch ich habe wohl ein wenig in die falsche Richtung gedacht danke an euch beiden die Frage hat sich dann hiermit geklärt 😃

16.834 Beiträge seit 2008
vor 6 Jahren

Wie willst Du denn einen Ordner direkt als C:\ verschieben? Das macht ja überhaupt keinen Sinn.
Du willst entweder die Inhalte auf C:\ verschieben/kopieren oder einen Ordner in "C:\abc" verschieben. Alle Szenarien können dazu durchgeführt werden.

Aber einen Ordner als Laufwerks-Root zu verschieben...
Dass Directory.Move kein Laufwerksbuchstabe erzeugen kann, das sollte klar sein. 😉

3.825 Beiträge seit 2006
vor 6 Jahren

Dazu eine kleine Anekdote :

Meine erste Batchdatei, die ich geschrieben habe, hiess 'move.bat'. Sie hat eine Datei in ein anderes Verzeichnis verschoben :

@echo off
copy %1 %2\*.*
del %1

Nachteil : Wenn es das Zielverzeichnis nicht gab wurde die Datei nur gelöscht.

Geschrieben auf einem Victor Sirius mit MS-DOS 2.11.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3