Actualmente, estoy tratando con una pequeña aplicación que actualiza los archivos de base de datos compacta de mssql en un servidor iss.Diferencia entre File.Copy y File.Move
He preferido usar SSIS para organizar el flujo. Durante un par de días funcionó bien, pero luego comenzó a dar errores.
En SSIS, he utilizado la operación "Mover archivo" de la "tarea del sistema de archivos" para mover los archivos generados de una carpeta a la carpeta compartida del servidor iss. Si falla, en caso de un archivo bloqueado, lo intenta más tarde. Pero he visto que a veces los archivos en la carpeta de destino comienzan a desaparecer.
Luego he decidido escribir un código personalizado. Eliminé la "Tarea del sistema de archivos" y puse una "Tarea de script" en lugar de ella. Y escribe un par de líneas.
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;
Funcionó bien. Pero lo intenté bloqueando el archivo de destino. He conectado el archivo de destino en Sql Server Management Studio (es un archivo sdf). Y sorprendentemente también funciona.
Y lo he intentado desde el sistema operativo, al copiar el archivo fuente y pegarlo en el destino. Windows 7 me pregunta si deseo sobreescribirlo y digo que sí y sobrescribió el archivo (copiar y reemplazar) que uso con otro proceso, sin advertencia ningún error. Pero si trato de cambiar el nombre o eliminarlo no me deja hacer eso. O si trato de cortarlo y pegarlo (Mover y Reemplazar) dice "necesitas permiso para hacer esta acción".
Según tengo entendido, "Copiar, eliminar" y "Mover" son cosas totalmente diferentes. Y todavía no puedo entender cómo puedo sobrescribir un archivo bloqueado.
¿Alguna idea?
posible duplicado de [Diferencia entre en hacer copia de archivos/borrar y mover] (http://stackoverflow.com/questions/6621956/difference-between-in-doing-file-copy-delete-and-move) – BrokenGlass
no, no lo es, me pregunto cómo es posible sobrescribir un archivo bloqueado mediante File.Copy. Y los dos bloques de código a continuación no son los mismos: primera 'File.Copy (sourceFile, destinationFile, true); File.Delete (sourceFile);' segundo 'File.Delete (destinationFile); Archivo. Move (sourceFile, destinationFile); ' – fkucuk