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.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 ?
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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)?
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.
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 😃
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. 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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