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); } }