В настоящее время я имею дело с небольшим приложением, которое обновляет файлы компактной базы данных mssql на сервере iss.
Я предпочел использовать SSIS для организации потока. Пару дней все работало хорошо, но потом начало выдавать ошибки.
В SSIS я использовал операцию «Переместить файл» для задачи «Файловая система», чтобы переместить сгенерированные файлы из папки в общую папку на сервере iss. Если это не удается, в случае заблокированного файла, он пытается это позже. Но я видел, что иногда файлы в папке назначения начали исчезать.
Тогда я решил написать собственный код. Я удалил «Задачу файловой системы» и вместо нее поставил «Задачу сценария». И напишите в нем пару строк.
string destinationFile, sourceFile;
destinationFile = Path.Combine(Dts.Variables["FileRemoteCopyLocation"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString());
sourceFile = Path.Combine(Dts.Variables["OrginalFilePath"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString());
bool written = false;
try
{
File.Copy(sourceFile, destinationFile, true);
File.Delete(sourceFile);
written = true;
}
catch(IOException) {
//log it
}
if (written)
Dts.TaskResult = (int)ScriptResults.Success;
else
Dts.TaskResult = (int)ScriptResults.Failure;
Это сработало хорошо. Но я попробовал это, заблокировав файл назначения. Я подключил файл назначения в Sql Server Management Studio (это файл sdf). И удивительно, что это тоже работает.
И я попробовал это из операционной системы, скопировав исходный файл и вставив его в место назначения. Windows 7 спрашивает меня, хочу ли я перезаписать его, и я говорю «да», и он перезаписал файл (копировать и заменить), который я использую с другим процессом, без предупреждения, без ошибок.
Но если попытаться переименовать или удалить это не позволяет мне сделать это. Или, если я попытаюсь вырезать и вставить его («Переместить и заменить»), там будет написано «вам нужно разрешение для этого действия».
Как я понял, «Копировать, удалить» и «Переместить» - это совершенно разные вещи. И до сих пор не могу понять, как мне перезаписать заблокированный файл.
Есть идеи?