Вопрос

Я пытаюсь использовать StreamReader для чтения файла, но он всегда используется другим процессом, поэтому я получаю эту ошибку:

Процесс не может получить доступ к файлу '\arfjwknasgmed17\C$\ФЛАГ CONDITION\CP-ARFJN-FLAG.XLS - потому что он используется другим процессом.

Есть ли способ, которым я могу прочитать это, не копируя?Или это мой единственный вариант?

Это было полезно?

Решение

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

Однако, если у файла действительно нет прав на совместное использование для чтения, вы вообще не сможете его скопировать.

Возможно, вы не сможете получить доступ к файлу, если вы указываете право общего доступа, которое конфликтует с правом общего доступа программы, у которой уже открыт файл.Например, вы не можете предоставить доступ на запись, если программа, в которой он уже открыт, не предоставляет доступ на запись.

Если программа, которая открыла файл в первую очередь, поддерживает Volume Shadow Copy (VSS), вы также можете использовать VSS для получения доступа к файлу.

Существуют коммерческие драйверы программного обеспечения, которые позволяют вам получать доступ к таким файлам, даже когда они используются.Раньше у вас была возможность получить Open File Manager от St-Bernards, и вы также можете использовать Менеджер доступа к файлам (FAM) компания VisionWorks Solutions Inc.Эти драйверы обычно поставляются производителям программного обеспечения для резервного копирования для включения в их продукты.

VSS работает, сообщая программе, у которой уже открыт файл, что другая программа хотела бы прочитать его из файла.Затем VSS копирует файл и позволяет вам читать из этой копии.VSS не работает для устаревших приложений.

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

Другие советы

попробуйте приведенный ниже код.

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
fileStream = new StreamReader(fileStr);

Я пробовал это в Windows XP.Если файл уже открыт в режиме записи каким-либо другим процессом и в нем не указаны права общего доступа, вы все равно сможете открыть файл в режиме чтения.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top