gpt4 book ai didi

c# - System.IO.FileStream 文件访问与文件共享

转载 作者:IT王子 更新时间:2023-10-29 04:30:02 24 4
gpt4 key购买 nike

我搜索了所有地方,但找不到这个问题的答案。我明白 FileAccess处理机器上的文件访问和FileShare处理份额,但我找不到关于它究竟是如何组合在一起以及它们如何相互影响的解释。

例如,如果我有

using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )

这是否意味着机器上的用户只能读取文件,而远程访问文件夹的用户可以读取和写入文件?此外,使用

会产生什么影响
using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read ) )

我在哪里没有指定 FileShare?

最佳答案

FileAccess 说明您将如何处理该文件。非常容易理解,您会知道您将要阅读或写作。

FileShare 的难度要大得多,因为它需要您设身处地为另一位程序员着想。如果另一个进程也打开了文件,它会确定另一个进程可以做什么。两个进程访问一个文件可能会很麻烦,您需要通过可能的失败模式进行推理。您选择的值与文件类型和您想要的访问权限密切相关。按你要做什么来分解:

FileAccess.Read

如果另一个进程也从文件中读取,则不会有任何问题。所以 FileShare.Read 是默认选择。

如果另一个进程已经打开文件进行写入,您可能需要 FileShare.ReadWrite。它已经获得了写入权限,因此您永远不能仅使用 FileShare.Read 自己打开文件,您不能拒绝写入,因为另一个进程是第一个,您将被拒绝访问。这通常只适用于文本文件,您可以确定其他进程只会将文本附加到文件末尾。日志文件是非常常见的场景。仍然可能很棘手,该进程何时刷新对文件的更改很重要。您可能会观察到部分书写的文本行,请注意这一点。

FileAccess.Write

您不能使用 FileShare.Write 或 FileShare.ReadWrite。由于这将允许两个进程同时写入文件,因此文件内容将是两个程序输出的困惑。一种可能的解决方法是这些进程仲裁对文件的访问,确保只有其中一个可以同时访问文件。通常由命名的互斥体实现。

如果它是文本文件,您可以使用 FileShare.Read,与我在上面描述的日志文件的情况相同。否则默认选择应该是 FileShare.None

FileAcces.ReadWrite

不常见,仅在写入二进制数据并使用 Seek() 时使用。在您执行此操作时,任何其他进程都不可能正确读取文件,假设它们不自行仲裁访问,您必须使用 FileShare.None。

关于c# - System.IO.FileStream 文件访问与文件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com