2010-09-27 84 views
1

我正在尝试读取二进制文件,并且在64位系统上不断收到错误,看起来该文件正在以写入权限打开,并因此在放置在安全文件夹中时引发错误(Program Files in 64 bit视窗)。我可以通过将包含要读取文档的文件夹设置为只读来在我的系统(XP,32位)上复制此错误。C#的FileStream打开具有写权限的文件?

下面是我使用的代码:

public static byte[] GetContentFromFile(string file) 
    { 
     try 
     { 
      FileStream stream = new FileStream(String.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, file), FileMode.Open, FileAccess.Read); 
      BinaryReader reader = new BinaryReader(stream); 

      byte[] content = new byte[stream.Length]; 

      reader.Read(content, 0, content.Length); 

      reader.Close(); 
      stream.Close(); 

      return content; 
     } 
     catch 
     { 
      return new byte[0]; 
     } 
    } 

任何想法?

+0

它给你什么错误信息? – w69rdy 2010-09-27 15:58:31

+2

您的方法是否执行与File.ReadAllBytes()不同的任何操作? – 2010-09-27 16:03:58

+0

此代码不要求写入权限。我们正在查看正确的代码吗? – 2010-09-27 17:57:49

回答

0

把这个文件放在一个AppData文件夹中吗?

这可能有助于了解抛出的确切异常。当打开只读文件进行写入时抛出UnauthorizedAccessException,而如果代码在无权在特定模式下打开该文件的应用程序域中运行,则抛出SecurityException。第一种情况只会在您试图写入只读文件时才会发生,而如果用户或代码甚至无法读取,则会发生第二种情况。

另外,在黑暗中拍摄时,请尝试指定Read的FileShare值,以便其他线程/进程也可以读取该文件。缺省值为None,它锁定对文件的所有其他访问,并且如果Windows认为完全锁定以某种方式等于写入访问权限,则可能会导致问题。

相关问题