myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Directory.Move-Methode: (String, String) Problem
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
vegas1665
myCSharp.de-Mitglied

Dabei seit: 28.01.2018
Beiträge: 4


vegas1665 ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-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.
28.01.2018 13:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.241
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
28.01.2018 14:00 Beiträge des Benutzers | zu Buddylist hinzufügen
vegas1665
myCSharp.de-Mitglied

Dabei seit: 28.01.2018
Beiträge: 4

Themenstarter Thema begonnen von vegas1665

vegas1665 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 ?
28.01.2018 14:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.241
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Zitat von https://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx:
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.
28.01.2018 14:17 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.403
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Möchtest du evtl.

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

Directory.Move(sourceDirectory, destinationDirectory);

(also, daß "Ordner1" ein neuer Unterordner von "Ordner2" wird)?
28.01.2018 14:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vegas1665
myCSharp.de-Mitglied

Dabei seit: 28.01.2018
Beiträge: 4

Themenstarter Thema begonnen von vegas1665

vegas1665 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
28.01.2018 14:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vegas1665
myCSharp.de-Mitglied

Dabei seit: 28.01.2018
Beiträge: 4

Themenstarter Thema begonnen von vegas1665

vegas1665 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 :)
28.01.2018 14:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.241
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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. Augenzwinkern
28.01.2018 14:26 Beiträge des Benutzers | zu Buddylist hinzufügen
BerndFfm BerndFfm ist männlich
myCSharp.de-Team

avatar-3299.jpg


Dabei seit: 20.01.2006
Beiträge: 3.574
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Frankfurt a.M.


BerndFfm ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



Dazu eine kleine Anekdote :

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

Code:
1:
2:
3:
@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
29.01.2018 14:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.12.2019 10:55