C# - Dateien Schneiden und Einfügen in Neues Verzeichnis
Ich versuche, schneiden Sie Dateien aus einem Verzeichnis auf meinem computer und fügen Sie Sie in ein neues Verzeichnis jedes mal, wenn eine Datei erstellt wird, in diesem speziellen Verzeichnis. Ich bin schon beobachten, das Verzeichnis wäre es etwas einfaches, wie
if (e.ChangeType == System.IO.WatcherChangeTypes.Created)
{
//cut file
//paste into new directory
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst eine Klärung, "Ausschneiden und einfügen", die user interface-Bedingungen. In der Datei-system, es ist bezeichnet als "verschieben" der Datei.
Zweite, die Anregungen zur Nutzung Datei.MoveTo kann nicht arbeiten, wie Sie möchten. Die IO-Watcher wird Ihnen sagen, Wann eine Datei das erste mal erstellt, und nicht, wenn es fertig ist, auf die geschrieben wird. Wenn Sie sofort eine Datei verschieben, können Sie ziehen Sie es aus unter die Schriftsteller. Kann dies ein Fehler im Programm ist das schreiben in eine Datei.
Den richtigen Weg zu tun, was Sie vorschlagen, ist zu warten, bis die Datei geschlossen wurde, durch den Prozess, der zu schreiben ist, und dann verschieben Sie es.
Haben Sie einen Blick auf die LockFileEx - Methode in der MSDN-Website. Sie können es verwenden, um zu blockieren, bis Sie haben eine exklusive Sperre auf die Datei (was geschehen wird, wenn der schreiben-Prozess die Datei schließt). Dann verschieben Sie die Datei vor der Freigabe der Sperre.
Schließlich, Sie wollen wahrscheinlich nicht zu nennen
LockFileEx
aus der file-system-watcher-callback. Sie müssen möglicherweise warten Sie eine sehr lange Zeit, bevor Sie erhalten die exklusive Sperre auf die Datei. Stattdessen sollten Sie Warteschlange die erstellten Dateien werden gesperrt und verschoben, der von einem sekundären thread (oder den thread-pool).in der Tat, cut + paste ist äquivalent zu verschieben, so
System.IO.Datei.MoveTo()
behandeln soll, die dein problem ganz gutWenn Sie nur auf der Suche nach dem code Ausschneiden/einfügen, Blick in die Methoden: System.IO.Datei.Move() und System.IO.FileInfo.MoveTo(). Beide tun im Grunde das gleiche.