当前位置: 首页 > 编程语言 > C#

System.IO.FileStreamFileAccess与FileShareShare

时间:2023-04-11 02:55:35 C#

System.IO.FileStreamFileAccess与FileShare我已经搜索过了,但找不到这个问题的答案。据我所知,FileAccess处理机器上的文件访问,FileShare处理共享,但我找不到关于它们如何组合以及它们如何相互影响的解释。例如,如果我使用(FileStreamfs=newFileStream(pathName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))这是否意味着机器上的用户只能读取文件,而远程访问文件夹的用户可以读写文件?另外,如果我还没有指定FileShare,使用using(FileStreamfs=newFileStream(pathName,FileMode.Open,FileAccess.Read))的效果是什么?FileAccess说明您想对文件做什么。它很容易理解,你会知道你可以读或写。FileShare是一个非常棘手的问题,因为它需要您站在另一个程序员的立场上。它确定另一个进程在打开文件时可以做什么。两个进程访问一个文件可能会非常麻烦,您需要通过可能的故障模式进行推理。您选择的值与文件类型和所需访问权限密切相关。通过做你所做的来打破它:FileAccess.Read如果另一个进程也从文件中读取,你将永远不会有任何问题。所以FileShare.Read是默认选择。如果另一个进程已经打开文件进行写入,则可能需要FileShare.ReadWrite。它已获得写入权限,因此您永远无法使用FileShare.Read自己打开文件,也不能拒绝写入,因为其他进程在前,您将被拒绝访问。这通常只适用于文本文件,您可以确定其他进程只是将文本附加到文件末尾。日志文件是一种非常常见的情况。仍然可能很棘手,当进程刷新对文件的更改时确实很重要。您可能会观察到部分书写的文本行,请注意这一点。FileAccess.Write您不能使用FileShare.Write或FileShare.ReadWrite。由于这将允许两个进程同时写入文件,因此文件内容将是两个程序的混合输出。一种可能的解决方法是让这些进程仲裁对文件的访问,确保只有其中一个进程可以同时访问该文件。通常由命名的互斥锁实现。您可以使用FileShare.Read(如果它是文本文件),我在上面用日志文件描述了相同的场景。否则,默认选择应该是FileShare.NoneFileAccess.ReadWrite不常见,仅在写入二进制数据和使用Seek()时使用。当你这样做时,没有其他进程可以正确读取文件,假设他们不自己仲裁访问,你必须使用FileShare.None。FileShare与通过网络共享驱动器无关-它指示其他进程如何访问文件。如果第一个进程使用FileShare.Read打开文件,则其他进程可以使用FileAccess.Read打开文件,但在这种情况下,另一个进程无法使用FileAccess.Write打开文件。FileShare与Windows文件共享无关。它只讨论在同一台机器上共享文件。它指定在您最大化后处理的其他文件。此外,将现有句柄与其进行比较,以确定是否可以打开该文件。FileAccess指定您的访问权限。以上就是C#学习教程:System.IO.FileStreamFileAccessvsFileShare分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: