File.Copy блокирует исходный файл после завершения - PullRequest
21 голосов
/ 02 марта 2009

Мы пытаемся скопировать файл с сервера на локальный компьютер в приложении .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. Почему требование разрешения на чтение решает проблему?

Ответы [ 2 ]

4 голосов
/ 02 марта 2009

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

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

0 голосов
/ 02 марта 2009

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

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

...