C#的FileStream打开文件是否具有写权限?

时间:2010-09-27 15:53:56

标签: c# file-io

我正在尝试读取二进制文件,并且我一直在64位系统上出现错误,其中看起来该文件正在以写权限打开,因此当放入安全文件夹时会抛出错误(Program Files in 64位Windows)。我可以通过将包含要读取的文档的文件夹设置为只读来在我的系统(XP,32位)上复制此错误。

这是我正在使用的代码:

    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];
        }
    }

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将此文件放在AppData文件夹中?

了解抛出的确切异常可能会有所帮助。打开只读文件进行写入时抛出UnauthorizedAccessException,如果代码在没有权限以指定模式打开该文件的应用程序域中运行,则抛出SecurityException。因此,只有当您真正尝试写入只读文件时才会发生第一个,而如果用户或代码甚至无法读取它,则第二个会发生。

此外,只是在黑暗中拍摄,尝试指定FileShare值Read,这将允许其他线程/进程读取文件。默认值为None,它会锁定对文件的所有其他访问,如果Windows认为完全锁等同于写访问权,则可能会导致问题。