C # FileStream открытие файла с правами на запись? - PullRequest
1 голос
/ 27 сентября 2010

Я пытаюсь прочитать двоичный файл и продолжаю получать ошибки в 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 голосов
/ 27 сентября 2010

Вместо этого поместите этот файл в папку AppData?

Это может помочь узнать точное выбрасываемое исключение.UnauthorizedAccessException генерируется, когда файл, доступный только для чтения, открывается для записи, а SecurityException генерируется, если код выполняется в домене приложения, у которого нет разрешений на открытие этого файла в указанном режиме.Таким образом, первое произойдет только в том случае, если вы действительно пытаетесь записать файл только для чтения, а второе может произойти, если пользователь или код даже не могут его прочитать.

Кроме того, просто выстрел вdark, попробуйте указать значение FileShare для Read, которое позволит другим потокам / процессам также читать файл.По умолчанию установлено значение «Нет», что блокирует любой другой доступ к файлу и может вызвать проблему, если Windows считает, что полная блокировка как-то приравнивается к доступу на запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...