Мы пытаемся скопировать файл с сервера, вплоть до локального компьютера в приложении .NET 2.0 (С#), но продолжаем без необходимости блокировать исходный файл. Мы подозреваем, что это что-то настроено на файловом сервере, который вызывает это поведение, но не уверен, что... вы можете помочь?
После операции копирования файлов файловый сервер (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 и его компонентов.
Мы также не уверены, почему требование разрешения чтения на файл решает проблему.
Если бы вы могли ответить на эти вопросы, мы были бы очень благодарны:
- Что заставляет блокировки файлов сохраняться?
- Почему запрос на чтение разрешает проблему?