/** \brief Backup del fichero indicado como parámetro * \param SpoolFile Contiene una structura tipo STRUCT_WATCHIO.BackupFile con información para hacer un backup de un fichero */ public static void BackupFile(Object SpoolFile) { // Estructura con información del fichero de spool y el directorio donde se va a guardar un backup STRUCT_WATCHIO.BackupFile StructBackupFile; StructBackupFile = new STRUCT_WATCHIO.BackupFile(); StructBackupFile = (STRUCT_WATCHIO.BackupFile)SpoolFile; //Fecha para guardar un backup existente de fichero de spool string Fecha = DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Hour.ToString() + "-" + DateTime.Now.Minute.ToString() + "-" + DateTime.Now.Second.ToString(); // --- ficheros de Spool --- // Fichero de spool del que se quiere hacer copia string FicheroSpool = StructBackupFile.PathDirectory + @"\" + StructBackupFile.FileName; // Backup del fichero de spool string FicheroSpoolBackup = StructBackupFile.PathDirectory + @"\" + StructBackupFile.PathDirectoryBackup + @"\" + StructBackupFile.FileNameBackup; // Backup del fichero de Spool try { // Comprobamos si existe el directorio de backup para Spool de impresión. Si no existe se crea DirectoryInfo VSpoolDirectoryBackup = new DirectoryInfo(StructBackupFile.PathDirectory + @"\" + StructBackupFile.PathDirectoryBackup); if (!VSpoolDirectoryBackup.Exists) { VSpoolDirectoryBackup.Create(); Log.Debug("Se crea el Subdirectorio de backup de Spool de Impresión: " + StructBackupFile.PathDirectory + @"\" + StructBackupFile.PathDirectory); } // Guardamos copia del fichero. File.Copy(FicheroSpool, FicheroSpoolBackup, true); Log.Info("Se hace copia del fichero de Spool: " + (char)13 + " - " + FicheroSpool + " en:" + (char)13 + "- " + FicheroSpoolBackup); } catch (Exception e) { Log.Error("Se ha producido el error: " + e.Message + (char)13 + " Al copiar el fichero de spool: " + FicheroSpool + " en " + FicheroSpoolBackup); } }
public void WatchIO_IsFileLocked_ComprobarSiUnFicheroEstaBloqueado() { // Fecha para guardar un backup existente de fichero de spool string Fecha = DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Hour.ToString() + "-" + DateTime.Now.Minute.ToString() + "-" + DateTime.Now.Second.ToString(); // Tiempo de espera //const int _TIEMPO_ESPERA = ElapsedTime._TIEMPO_ESPERA; ElapsedTime TiempoEspera; // Objeto con información de un fichero FileInfo MiFileInfo; // Path donde se encuentran los ficheros a comprobar string Path; // Subdirectorio de backup string PathBackup; // Directorio donde se encuentran los ficheros de Spool DirectoryInfo Directorio; // Indica si el archivo está bloqueado bool FileLocked = true; // Información de archivo y su directorio de Backup STRUCT_WATCHIO.BackupFile FileBackup; // Thread para lanzar el método delegado para copiar archivos Thread ThreadBackupFile; /// Inicialización (Arrange) Path = @"D:\TestMonitorImpresion\Prueba"; PathBackup = "MonitorImpresion"; Directorio = new DirectoryInfo(Path); foreach (var Archivo in Directorio.GetFiles("*.SPL")) { // Información del archivo //MiFileInfo = new FileInfo(Archivo.FullName); // Guardamos información en estructura para hacer una copia del archivo FileBackup = new STRUCT_WATCHIO.BackupFile(); FileBackup.PathDirectory = Path; FileBackup.FileName = Archivo.Name; FileBackup.PathDirectoryBackup = PathBackup; FileBackup.FileNameBackup = Archivo.Name.ToUpper().Replace(".SPL", "") + "_" + Fecha + ".SPL"; // THREADING para copiar fichero ThreadBackupFile = new Thread(new ParameterizedThreadStart(Util.BackupFile)); ThreadBackupFile.Name = "Thread_BackupFile_" + Archivo.Name; ThreadBackupFile.Start(FileBackup); // Detectar si el fichero está bloqueado //FileLocked = WatchIO.IsFileLocked(FileBackup.PathDirectory + @"\" + FileBackup.PathDirectoryBackup + @"\" + FileBackup.FileNameBackup, _TIEMPO_ESPERA); MiFileInfo = new FileInfo(FileBackup.PathDirectory + @"\" + FileBackup.PathDirectoryBackup + @"\" + FileBackup.FileNameBackup); // Creamos un objeto para controlar un tiempo de espera TiempoEspera = new ElapsedTime(20); FileLocked = WatchIO.IsFileLocked(MiFileInfo); while ((!TiempoEspera.OverElapsedTime()) & FileLocked) { FileLocked = WatchIO.IsFileLocked(MiFileInfo); } // Esperamos hasta que finaliza el Thread para hacer un backup ThreadBackupFile.Join(); /// Comprobación (Assert) Assert.IsTrue(!FileLocked); } }