System.IO.FileStream FileAccess vs FileShare
Ich habe gesucht alle über aber kann nicht finden, eine Antwort auf diese Frage. Ich verstehe, dass FileAccess beschäftigt sich mit file-Zugriff auf die Maschine und FileShare beschäftigt sich mit der Freigabe, aber ich kann nicht finden eine Erklärung, wie das genau zusammen kommt, und wie Sie sich gegenseitig beeinflussen.
Zum Beispiel, wenn ich
using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )
heißt das, dass der Benutzer auf dem Computer kann die Datei nur Lesen, während Benutzer Remote-Zugriff auf den Ordner lese-und Schreibzugriff auf die Datei? Außerdem, was wären die Auswirkungen bei der Verwendung
using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read ) )
Wo ich noch nicht angegeben, die FileShare?
InformationsquelleAutor Storm | 2014-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
FileAccess sagt, was Sie tun werden, mit der Datei. Ziemlich leicht zu verstehen, werden Sie wissen, Sie gehen, um zu Lesen oder zu schreiben.
FileShare ist das viel schwieriger, da es erfordert, dass Sie Schritt in die Schuhe von einem anderen Programmierer. Es legt fest, was ein weiterer Prozess tun kann, wenn es auch die Datei geöffnet hat. Zwei Prozesse, die Zugriff auf eine Datei kann sehr lästig sein, müssen Sie zu Grund durch die möglichen Versagensarten. Der Wert, den Sie wählen, ist stark auf den Typ der Datei und der Zugriff auf Sie wollen. Es brechen durch das, was Sie tun werden:
Gibt es nie irgendwelche Probleme, wenn ein anderer Prozess liest aus der Datei. So FileShare.Lesen ist die Standard-Wahl.
Müssen Sie möglicherweise FileShare.ReadWrite, wenn ein anderer Prozess bereits eröffnet die Datei zum schreiben. Es schon erlangt Schreibzugriff, so dass Sie können öffnen Sie nie die Datei selbst nur mit FileShare.Lesen, Sie können nicht leugnen schreiben, da das andere Verfahren wurde zum ersten mal, werden Sie Zugriff verweigert, statt. Diese in der Regel nur darum geht, eine gute auf eine text-Datei, die Art, wo Sie sicher sein können, dass der andere Prozess ist immer nur anfügen von text an das Ende der Datei. Eine log-Datei, die sehr häufiges Szenario. Möglicherweise immer noch schwierig, es darauf ankommt, Wann genau dieser Prozess spült die änderungen an der Datei. Sie könnte beobachten, teilweise geschriebene Zeilen text, hüten Sie sich vor diesem.
Können Sie nicht verwenden, FileShare.Schreiben oder FileShare.ReadWrite. Da würde es ermöglichen, dass zwei Prozesse schreiben in die Datei an der gleichen Zeit, der Inhalt der Datei wird ein Durcheinander von die Ausgabe beider Programme. Ein möglicher workaround ist, die diese Prozesse Steuern den Zugriff auf die Datei, um sicherzustellen, nur eine von Ihnen jemals auf die Datei zugreifen, zur gleichen Zeit. Normalerweise implementiert durch eine benannte mutex.
Können Sie FileShare.Lesen, wenn es text-Datei, gleiche Szenario, das ich oben beschrieben in der log-Datei. Die Standard-Wahl anders sein sollte, FileShare.Keine
Nicht üblich, nur verwendet, wenn Sie schreiben binäre Daten und verwenden Sie Seek(). Es gibt keine Hoffnung, dass irgendein anderer Prozess konnte überhaupt Lesen der Datei korrekt angezeigt werden, während Sie dies tun, vorausgesetzt, Sie nicht vermitteln konnte, sich Zugang verwenden, müssen Sie die Dateifreigabe.Keine.
InformationsquelleAutor Hans Passant
Den
FileShare
hat nichts zu tun mit den Laufwerken über ein Netzwerk gemeinsam genutzt - es zeigt, wie andere Prozesse auf die Datei zugreifen kann.Wenn der erste Prozess öffnet die Datei mit
FileShare.Read
andere Prozesse können die Datei öffnen, mitFileAccess.Read
, aber ein anderer Prozess die Datei nicht öffnen mitFileAccess.Write
in diesem Fall.das ist meist richtig. FileAccess ist nicht für die app, obwohl, aber für das FileStream-Instanzen. Das OS unterscheidet nicht zwischen Prozessen und threads, wenn es um Dateien geht. Wenn Sie weglassen, dass Attribut bekommen Sie eine Vorgabe, dass niemand mehr daran erinnert. So tun Sie das nicht.
MSDN sagt: "
FileShare.Read
ist der Standard für dieseFileStream
Konstruktoren ohneFileShare
parameter."wo hast du das bitte? Ich habe gerade erneut geprüft, die MSDN FileStream und es sagt nichts darüber, dass es, was ich bin fehlt?
msdn.microsoft.com/en-us/library/47ek66wy%28v=vs.110%29.aspx und msdn.microsoft.com/en-us/library/tyhc0kft%28v=vs.110%29.aspx und auch auf diese überlastung, wo es überhaupt keinen Sinn macht: msdn.microsoft.com/en-us/library/ms143395%28v=vs.110%29.aspx
InformationsquelleAutor C.Evenhuis
FileShare
hat nichts zu tun mit Windows-Dateifreigaben. Er spricht über das freigeben von Dateien auf der gleichen Maschine nur. Es gibt was andere Datei-handles kommt, nachdem Sie sind maximal in der Lage, das zu tun. Auch, vorhandene Griffe sind im Vergleich zu es zu entscheiden, ob Sie die Datei öffnen können oder nicht.FileAccess
gibt Ihre Zugriffsrechte.Nicht nur Datei-handles zu kommen, nachdem Sie. Es wird überprüft, gegen den bereits geöffneten handles als gut. Wenn die Datei zugreifen, kommt in Konflikt mit einem anderen Griff-Datei zu teilen, die neu eröffnete Griff verliert.
InformationsquelleAutor usr