File.Copy блокирует исходный файл после завершения

StackOverflow https://stackoverflow.com/questions/603444

  •  03-07-2019
  •  | 
  •  

Вопрос

Мы пытаемся скопировать файл с сервера на локальный компьютер в приложении .NET 2.0 (C#), но исходный файл по-прежнему заблокирован без необходимости.Мы подозреваем, что такое поведение вызвано какой-то настройкой на файловом сервере, но мы не уверены, что...вы можете помочь?

После операции копирования файла файловый сервер (Windows 2K3 R2) сообщает, что исходный файл удерживается с блокировкой чтения, хотя никаких дальнейших операций с файлом на сервере не выполняется.Блокировка снимается после закрытия приложения.

Мы можем воспроизвести поведение даже с помощью самого простого кода, показанного ниже:

static void Main(string[] args)
{
    string sourceFile = @"\\win2K3server\resource\Production\IQE\sourceFolder\iqeconsole.exe";
    string destinationFile = @"d:\destinationFolder\iqeconsole.exe";
    System.IO.File.Copy(sourceFile,destinationFile,true);

    Console.ReadLine();
}

Блокировка происходит сразу во время File.Copy() выполнение строки и сохраняется после завершения этой строки.В более сложном приложении, когда процедура с File.Copy() завершается (но приложение все еще работает), блокировка сохраняется.

Блокировка снимается только после завершения всего приложения.

Изменение sourceFile использование подключенного диска вместо пути UNC не влияет на поведение.

Такое поведение не происходит, если исходный файл находится на другом сервере или локально.

Если мы добавим следующую строку после File.Copy, блокировка немедленно снимается:

new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();

Для нас все это звучит так, как будто на сервере есть что-то, вызывающее такое поведение.У нас на сервере установлен ShadowProtect вместе с антивирусом McAfee.Кроме того, создается впечатление, что помимо Windows Server и его компонентов больше ничего не установлено.

Мы также не уверены, почему требование разрешения на чтение файла решает проблему.

Если бы вы могли ответить на эти вопросы, мы были бы вам очень признательны:

  1. Что является причиной сохранения блокировки файлов?
  2. Почему требование разрешения на чтение решает проблему?
Это было полезно?

Решение

Вероятно, блокировку удерживает сканер McAfee при доступе.Если вы используете только доступ для чтения, он обходится.Я считаю, что вы можете использовать инструмент Sysinternals Process Viewer (бесплатный от Microsoft), чтобы подтвердить это.

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

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

Я не могу повторить это на наших файловых серверах.

Однако я знаю, что уступающая блокировка отключена, поскольку мы используем PeerLock от PeerSoftware.

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