Was genau ist der Unterschied zwischen My.Computer.FileSystem und System.IO.File

8

Es gibt viele Doppelfunktionen in den Namensräumen My.Computer.FileSystem und System.IO.File .

Also, was genau ist der Unterschied zwischen:

%Vor%

und:

%Vor%

Gibt es einen Leistungsunterschied? Was ist die Meinung von jedermann darüber, was die Lesefähigkeit ausmacht? Ich benutze persönlich den My.Computer Namespace, aber das ist jetzt nur eine Gewohnheit.

    
Matt Wilko 03.05.2011, 14:39
quelle

4 Antworten

9

My. * ist einfach eine Gruppe von Fassadenmusterklassen, die für VB.NET implementiert sind und allgemeine System.IO * (und andere) Operationen umfassen. Es gibt einen sehr winzigen Performance-Hit, da Sie eine zusätzliche Abstraktionsebene durchlaufen, aber Sie müssen entscheiden, ob es sich lohnt, dafür zu optimieren. Ich würde vorschlagen, den Weg zu wählen, der für Sie und andere in Ihrem Geschäft Sinn macht.

Wenn Sie den Code für My.Computer.FileSystem.CopyFile mit .NET Reflector untersuchen, werden Sie feststellen, dass die Methode viele System.IO-Klassen wie Datei und Verzeichnis und insbesondere die Klasse "Kopieren, Verschieben und Löschen" umschließt. Snippet:

%Vor%     
Paul Sasik 03.05.2011, 14:41
quelle
3

Praktisch nichts.

My.Computer wurde VB als eine bequemere und verständliche Abstraktionsschicht für zugrunde liegende Funktionen hinzugefügt. Einige dieser Methoden fügen neue Funktionen hinzu, die meiner Meinung nach die einzige Möglichkeit wären, sie über System.IO.File zu verwenden.

Ein Beispiel, in dem My.Computer Funktionalität über System.IO.File hinzufügen würde, ist Network.DownloadFile -Methode, wobei es die Möglichkeit hat, dem Benutzer einen Dialog anzuzeigen:

  

Wenn showUI auf True festgelegt ist, wird ein Dialogfeld angezeigt   erscheint, zeigt den Fortschritt der   Betrieb; Das Dialogfeld enthält a   Abbrechen-Schaltfläche, die verwendet werden kann   Die Operation abbrechen. Das Dialogfeld   ist nicht modal und deshalb nicht   Blockieren Sie Benutzereingaben für andere Fenster in   das Programm.

Wenn Sie System.IO.File bereits an Orten verwendet haben, kann ich aus Konsistenzgründen die Verwendung von My.Computer nicht empfehlen. Nämlich nicht, Anrufe mit Methoden in My.Computer und System.IO.File zu mischen, bleiben Sie bei einem Namespace!

    
Rudi Visser 03.05.2011 14:45
quelle
0

Der Namespace My ist ein VB.Net-Konstrukt, das teilweise als Brücke zwischen VB6- und .Net-APIs dienen soll. Diese Methoden werden VB6-Semantik + Aussehen und Verhalten haben.

Wenn Sie ein VB6-Benutzer sind, der auf .NET umstellt, würde ich diese Methoden verwenden, da sie näher an dem von Ihnen erwarteten Verhalten liegen. Ansonsten würde ich bei den Standard-.Net-APIs von System.IO.File.Copy

bleiben

BEARBEITEN

Mehrere Leute haben gefragt, ob ich den Namensraum My für den Namensraum Microsoft.VisualBasic falsch interpretiere. Ich bin nicht. Der My -Namespace ist eine Menge Dinge, aber ein Element ist es, bestimmte Aufrufe in Methoden einzubetten, die in Microsoft.VisualBasic weiterleiten. Zum Beispiel, wenn Sie den folgenden Code in ein VB.net-Projekt eingeben

%Vor%

Dies führt zu folgenden Ereignissen:

  • Ein Aufruf von MyProject.Computer.FileSystem.CopyFile wird in die Anwendung
  • eingebettet
  • Die Typen MyProject und MyComputer werden in der Baugruppe
  • generiert
  • Der MyComputer Typ leitet sich einfach von Microsoft.VisualBasic.Devices.Computer ab
  • Daher wird die FileSystem.CopyFile -Methode in FileSystemProxy.CopyFile aufgelöst, die einfach an FileSystem.CopyFile weiterleitet.
JaredPar 03.05.2011 14:46
quelle
0

In Bezug auf die

%Vor%

und

%Vor%

Methode gibt es einen ganz wichtigen Unterschied.

Verwenden Sie

%Vor%

Eine 'System.IO.IOException' wird ausgelöst, wenn das Verzeichnis nicht leer ist. Jedoch mit

%Vor%

Die Standardaktion besteht darin, fortzufahren und die Datei zu löschen, es sei denn, Sie fügen einen zusätzlichen Parameter hinzu

Dies ist von dieser Seite

  

Public Shared Sub DeleteDirectory (Verzeichnis als String, onDirectoryNotEmpty als DeleteDirectoryOption   )

     

Parameterverzeichnis

     

Typ: System.String Verzeichnis, das gelöscht werden soll.   onDirectoryNotEmpty

     

Typ:   Microsoft.VisualBasic.FileIO.DeleteDirectoryOption   Gibt an, was zu tun ist, wenn ein zu löschendes Verzeichnis Dateien oder Verzeichnisse enthält. Der Standardwert ist DeleteDirectoryOption.DeleteAllContents.

Die andere Option besteht darin, DeleteDirectoryOption.ThrowIfDirectoryNonEmpty

anzugeben

Es gibt auch andere Unterschiede, aber diese eine steht für mich eine Meile.

    
David Wilson 29.06.2016 21:23
quelle