无法打开文件流进行阅读,但我仍然可以复制文件?

Voj*_*nal 3 .net c# windows file-io filestream

这一行:

using (FileStream fs = File.Open(src, FileMode.Open, FileAccess.Read, FileShare.Read))
Run Code Online (Sandbox Code Playgroud)

抛出:

System.IO.IOException:进程无法访问文件"X",因为它正由另一个进程使用.

当我用以下代码替换:

File.Copy(src, dst, true);
using (FileStream fs = File.Open(dst, FileMode.Open, FileAccess.Read, FileShare.Read))
Run Code Online (Sandbox Code Playgroud)

有用.

但是为什么我可以复制,它肯定会读取文件的整个内容,同时被限制直接读取文件?有解决方法吗?

Sam*_*nen 7

打开文件时,会检查访问模式和共享模式.任何进程的访问模式必须与其他进程的共享模式兼容.因此,如果A想要读取权限,则其他人必须允许以共享模式进行读取.写作也一样.

如果进程A打开了一个用于写入的文件,并且您说SharingMode.Read该调用将失败.在这种情况下,您说"其他人只能从文件中读取,而不是写入".

如果您指定ShareMode.ReadWrite您说"其他人可以读取或写入,我不在乎",如果没有指定其他进程ShareMode.Write,则允许您从该文件中读取.