コード例 #1
0
        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);
            }
        }