C# 为什么File.copy可以工作,但File.OpenRead提示拒绝访问?

C# 为什么File.copy可以工作,但File.OpenRead提示拒绝访问?,c#,encryption,copy,C#,Encryption,Copy,我想复制另一个进程正在使用的加密文件 这项工作: System.IO.File.Copy("path1", "path2",true); 但是下面的代码不起作用。提示“文件访问被拒绝”错误: 如果文件被其他进程使用,如何复制加密文件 谢谢 更新:我使用此代码并为我工作: using (var fileStream = new System.IO.FileStream(@"filepath", System.IO.FileMode.Open, System.IO.FileAccess.Read,

我想复制另一个进程正在使用的加密文件

这项工作:

System.IO.File.Copy("path1", "path2",true);
但是下面的代码不起作用。提示“文件访问被拒绝”错误:

如果文件被其他进程使用,如何复制加密文件

谢谢

更新:我使用此代码并为我工作:

using (var fileStream = new System.IO.FileStream(@"filepath", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite))
{

}

如果您使用
FileShare.Read
,这在您的示例中是隐式发生的,那么如果另一个进程已经打开该文件进行写入,则打开该文件将失败

File.OpenRead(fileName)
new FileStream(fileName, FileMode.Open, FileAccess.Read)
new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
如果指定
FileShare.ReadWrite
,则打开时不会触发错误,但另一个进程可能会在读取数据时更改正在读取的数据。您的代码应该能够处理未完全写入的数据或此类更改

new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

上次尝试导致异常后,filestream是否关闭?您的代码实际上没有显示正在使用的
File.OpenRead
。尽管进行了检查,但您使用的构造函数似乎默认为添加
FileShare.Read
,这就是
File.OpenRead
所使用的…可能是由于
File.OpenRead
使用
FileShare.Read
而不是
FileShare.ReadWrite
造成的。如果另一个进程已经打开文件进行写入,我预计前者会失败。尝试
newfilestream(fileName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite)
抛出的肯定是
newfilestream()
,是吗?(而不是新的流解密(…))谢谢@CodesInChaos这对我来说是有效的,没有显示访问错误:使用(var fileStream=new System.IO.fileStream(@“filepath”,System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.ReadWrite))
new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)