Могу ли я перезаписать файл, который в данный момент открыт другим пользователем - PullRequest
3 голосов
/ 05 мая 2011

У меня есть пара файлов, которые я должен периодически обновлять с помощью процесса, написанного на VB.net. Эти файлы находятся на сервере и являются частью домена, к которому имеют доступ многие пользователи. Эти файлы никогда не должны быть записаны, поскольку они только для справки. Мне нужно иметь возможность перезаписать некоторые из них, даже если пользователь открыл их. Можно ли сделать это? В настоящее время права доступа к файлам не установлены только для чтения, но я могу сделать это до тех пор, пока пользователь, под которым запускается процесс, все еще будет иметь право перезаписывать их.

ОБНОВЛЕНИЕ: спасибо за ваши ответы. Файлы в формате PDF и открываются, нажав на них в проводнике Windows. Это также происходит, когда пользователь просто выбирает файл в проводнике Windows.

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

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

0 голосов
/ 18 марта 2014

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

Но если вы установите try catch и оператор catch, игнорирующий исключение из сообщения «Доступ к пути ....». Ваше обновление будет успешно выполнено.

например:

try
{
    .
    .
    .
    your update statement here
    .
    .
}
catch (Exception ex)
{
    if (ex.Message.IndexOf("Access to path") < 0)
        throw ex;
}
0 голосов
/ 05 мая 2011

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

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