Obecnie mam do czynienia z małą aplikacją, która aktualizuje kompaktowe pliki mssql na serwerze ISS.Różnica między File.Copy a File.Move
Wolałem używać SSIS do zorganizowania przepływu. Przez kilka dni działało dobrze, ale potem zaczęło dawać błędy.
W SSIS użyłem operacji "File File" zadania "Move File", aby przenieść wygenerowane pliki z folderu do udostępnionego folderu serwera iss. Jeśli się nie powiedzie, w przypadku zablokowanego pliku spróbuje później. Ale widziałem, że czasami pliki w folderze docelowym zaczęły znikać.
Potem zdecydowałem się napisać niestandardowy kod. Usunąłem "Zadanie systemu plików" i zamiast tego wstawiłem "Zadanie skryptu". I napisz kilka linijek.
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;
To działało dobrze. Ale spróbowałem, blokując plik docelowy. Połączyłem docelowy plik w Sql Server Management Studio (jest to plik sdf). I zaskakująco to też działa.
Próbowałem go z systemu operacyjnego, kopiując plik źródłowy i wklejając go do miejsca docelowego. Windows 7 pyta mnie, czy chcę go zastąpić, a ja odpowiem "tak", a on nadpisał plik (skopiuj i zamień), którego używam w innym procesie, bez ostrzeżenia bez błędu. Ale jeśli spróbuję zmienić nazwę lub usunąć to nie pozwala mi to zrobić. Jeśli spróbuję go wyciąć i wkleić (Przenieś i Zamień), oznacza to, że "potrzebujesz uprawnień do wykonania tej akcji".
Jak zrozumiałem, "Kopiuj, usuń" i "Przenieś" to zupełnie inne rzeczy. Nadal nie mogę zrozumieć, w jaki sposób mogę nadpisać zablokowany plik.
Wszelkie pomysły?
możliwe duplikat [różnica między robiąc kopię pliku/delete i Move] (http://stackoverflow.com/questions/6621956/difference-between-in-doing-file-copy-delete-and-move) – BrokenGlass
Nie, nie, zastanawiam się, jak można nadpisać zablokowany plik za pomocą File.Copy. a dwa bloki kodu poniżej nie są takie same: pierwszy 'File.Copy (SourceFile, destinationFile, true); File.Delete (SourceFile);' sekund 'File.Delete (destinationFile) plik. Przenieś (sourceFile, destinationFile); ' – fkucuk