2016-06-23 6 views
0

Внутреннее приложение в нашей компании требует, чтобы файлы aa, bb ... zz в папке X были прочитаны при запуске. Когда я (как кто-то с доступом FullControl к папке X) запустил приложение, все будет хорошо. Когда какой-либо из моих коллег (которые имеют доступ только для чтения к папке X) запускают приложение, они получают исключение «Доступ запрещен к файлу aa ...».Приложение не может получить файл, хотя я могу его скопировать с помощью проводника

файлы считываются с помощью следующей рутинного

 public static void readFromBinaryFile(this QIHasFileIo xThis, string xFilePath) 
     { 
      if (!System.IO.File.Exists(xFilePath)) 
       throw new System.Exception("File to read " + xFilePath + " does not exist ... "); 

      if (xThis == null) 
       throw new NullReferenceException("xThis cannot be null, as it is a readonly reference ... "); 

      using (BinaryReader xReader = new BinaryReader(new FileStream(xFilePath, FileMode.Open, FileAccess.Read))) 
       xThis.readObject(xReader); 
     } 

т.е. я задающий режим чтения, который в свою очередь должен требовать только доступ на чтение к папке. Когда мои коллеги перейдут в папку X в Проводнике, тогда можно скопировать файлы aa, bb, ... на свои рабочие столы, а это значит, что у них есть доступ к файлам для чтения.

Так что я заинтригован. Это странное поведение началось с изменений в сервере данных пару дней назад. Наиболее заметные изменения заключались в том, что 1/мои коллеги перестали иметь права администратора на сервере данных 2/некоторые объекты групповой политики, возможно, были испорчены (это произошло раньше в компании). ИТ-отдел тоже озадачен, поэтому я не знаю, как действовать.

Любой намек очень ценится, Daniel

Edit: уже удалил сообщение предложил использовать FileShare.ReadWrite. Я благодарен автору за комментарий, однако в файле гарантируется отсутствие блокировки записи. Следовательно, нить why File.copy works but File.OpenRead prompts access denied? здесь не имеет отношения.

+0

Является ли файл одновременно записывается в другой процесс? – Baldrick

+0

Если это так, вам нужно добавить 'FileShare.ReadWrite' к параметрам, переданным конструктору' FileStream'. Это предотвращает попытку получить эксклюзивную блокировку чтения. – Baldrick

+0

Возможный дубликат [почему File.copy работает, но File.OpenRead запрашивает доступ запрещен?] (Http://stackoverflow.com/questions/28087927/why-file-copy-works-but-file-openread-prompts-access- denied) – Baldrick

ответ

1

Нужно добавить FileShare.ReadWrite к параметрам, переданным конструктору FileStream.

Это не позволяет приложению пытаться получить эксклюзивную блокировку чтения, что может быть невозможно при некоторых условиях, когда возможна совместная блокировка чтения и записи (например, файл остается открытым для записи другим процессом).

1

У меня была схожая проблема при чтении файла. Проблема заключалась в том, что уровень доступа для группы ActiveDirectory для определенной группы (группы читателей) пользователей не был настроен правильно. Я не уверен, что вы используете аутентификацию группы AD на сервере. Я бы рекомендовал вам проверить тип доступа и группы ваших коллег. Кроме того, вам нужно проверить, как ваше приложение в настоящее время проверяет пользователей на доступ к каталогу.

+0

Спасибо.В настоящее время приложение само по себе не имеет никакой аутентификации (мы небольшая компания), поэтому приложение обращается к файлам с информацией для входа в Windows. Что касается группы ... можете ли вы, пожалуйста, помнить больше, какое-то ключевое слово или что-то еще, чтобы я мог дать нашим ИТ-подсказкам? Большое спасибо. –

+0

Спасибо за детали. Как вы уже упоминали, что вы используете учетную запись Windows, у вас есть тест по методу ударов и пробной версии. Просто предлагаю вам несколько способов: 1. Проверьте, доступен ли пользователю доступ к каталогу (или конкретному файлу). 2. Попробуйте дать пользователю полный доступ и протестировать его. 3. Попробуйте создать другой путь доступа к файлу за пределами текущего каталога, где у пользователя есть правильный доступ к файлам –