Kopieren Sie den gesamten Inhalt eines Verzeichnisses in C#

Möchte ich kopieren Sie den gesamten Inhalt eines Verzeichnisses von einem Ort zum anderen in C#.

Es scheint nicht ein Weg, dies zu tun mit System.IO Klassen, ohne viel Rekursion.

Gibt es eine Methode in VB, die wir verwenden können, wenn wir hinzufügen, die einen Verweis auf Microsoft.VisualBasic:

new Microsoft.VisualBasic.Devices.Computer().
    FileSystem.CopyDirectory( sourceFolder, outputFolder );

Dies scheint wie ein ziemlich hässlicher hack. Gibt es einen besseren Weg?

  • Verzeichnis Kopieren und dessen Inhalt in ein Anderes Verzeichnis in C#.
  • Ich würde sagen, dass der Blick auf die alternativen unten geschrieben, dass das VB Weg, sieht nicht so hässlich.
  • Die eigentliche Frage ist, warum ist das nicht in der Standard-IO-Bibliothek? Indem wir jetzt wohl alle haben den gleichen code in eine eigene, persönliche Bibliothek.
  • Wie kann es ein hack, wenn es Teil der .NET Framework? Stop-code schreiben, und nutzen, was Sie bekam.
  • Microsoft.VisualBasic ist eine Reihe von add-on-Zeug für die Herstellung Vermächtnis VB6-Projekte einfacher zu aktualisieren. Sie würden in der Regel nicht verwenden Sie es in einer C# - Anwendung. Wenn es eine 'richtige' Teil der .Net framework wäre es in System.IO. Auch nur die System.[something] Namensräume sind Teil der Mono.
  • Das ist ein häufiges Missverständnis. Microsft.VisualBasic enthält alle gängigen Visual Basic-Prozeduren, die macht das coding in VB so viel einfacher. Microsoft.VisualBasic.Kompatibilität ist die Montage verwendet für VB6 legacy.
  • Wenn Sie einen Blick auf die Quelle für CopyDirectory Sie werden sehen, dass es System.IO oder interne Shell-API-Aufrufe, je nachdem, wie CopyDirectory genannt wird.
  • Der Grund, warum Microsoft.VisualBasic ist nicht Hinzugefügt, um ein C# - Projekt ist, weil es nicht ein VB-Projekt. Auch VB.NET Projekte müssen hinzufügen von Microsoft.VisualBasic.Kompatibilität wenn Sie möchten, um die Verwendung von legacy-Funktionen. Die Kompatibilitätsebene wird nur Hinzugefügt, indem Sie den Assistenten für die migration oder durch den Benutzer.
  • Es gibt über 2.000 Zeilen code zu Microsoft.VisualBasic.- Geräte.Computer.Dateisystem. CopyDirectory sicher, dass Sie nicht das kopieren von einem Ordner in einen untergeordneten Ordner und andere Prüfungen. Es ist hoch optimiert, und so weiter. Die ausgewählte Antwort ist zerbrechlich-code am besten.
  • Das ist eine Einschränkung von Mono. Nicht Teil Ihrer Antwort. Sie wollen einen besseren Weg, und es gibt keine.
  • Wenn Sie brauchen, System.Windows.Formen.Design, sind Sie gehen, um zu vermeiden, hinzufügen, dass die Referenz, nur weil es das Wort "Design"? Natürlich nicht. Daher die Vermeidung von etwas, das gebaut in den Rahmen, nur weil es das Wort "VisualBasic" in seinem Namen ist, naja..., einfach nur...dumm.
  • Sie C# Jungs nur mich töten. Es geht nicht um tools, es wird über Lösungen.
  • ok, also warum ist dieses optimierte und vollständige code in Microsoft.VisualBasic und nicht System.IO? Der Grund, warum es nicht in Mono ist, weil alle Bibliotheken, die als "core" sind System.[something] - alle anderen nicht. Ich habe kein problem mit Bezug auf eine zusätzliche DLL, aber es gibt einen guten Grund, warum Microsoft noch nicht enthalten diese Funktion in System.IO.
  • Für alle von Euch, die denken, dass es einfach gut zu benutzen Microsoft.VisualBasic: würden Sie gerne mithilfe einer Bibliothek von Perl in python? Das ist im Grunde, was passiert ist, mit geringfügigen unterschieden. Auch nicht mit System.* Bibliotheken, Sie sind potenziell einschränkende sich aus der Verwendung von Mono, die ich sammeln kann ein problem sein, aus den Bemerkungen der OP.
  • Die besten Entwickler sind diejenigen, die den job zu bekommen getan effektiv und schnell. Was also, wenn der name Visual Basic in es, ist die Tatsache, der code in der DLL ist nur MSIL. Microsoft hat klar geschrieben, einen effektiven Algorithmus, und es wäre eine Schande für jemanden, der es zu übersehen, nur weil es das Wort Visual Basic in seinem Namen. Insbesondere dann, wenn es einen Algorithmus schreibt er nur wegen einer DLL name oddity endet als buggy und kostet mehr Zeit, dies zu beheben.
  • Vielleicht ist die BCL abgeschlossen war, bevor Sie entdecken, dass diese Funktion nötig war. Alles, was wir tun können, ist spekulieren an dieser Stelle. Sie haben einen guten Grund, warum sollten Sie nicht die DLL als der name? Hat die MSDN-Dokumentation sagen, dass diese Funktion ist veraltet?
  • nee - das ist eine ganz alte Frage, die jetzt und Microsoft.VisualBasic-Verweis wurde in versendet die software über ein Jahr. Ich habe nur gefragt, warum es war in der seltsamen Lage - es sollte so etwas wie System.IO.Directory.Copy(sourceFolder, outputFolder)
  • Ich bin damit einverstanden, dass ' s, wo es sein sollte, aber es ist definitiv plausibel, dass der BCL abgeschlossen war, bevor Sie erkannte, dass es notwendig wäre für das VB und damit der nutzen es und Sie nie gedacht, zu überdenken es. Nur der Theorie wohlgemerkt. 🙂
  • Ich habe gerade die Q&A würde dies mit einigen xcopy-Optionen wie in C#. stackoverflow.com/questions/22151995/...
  • Ich benutze robocopy funktioniert es Super

InformationsquelleAutor Keith | 2008-09-12
Schreibe einen Kommentar