Ejemplo n.º 1
0
        /** \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);
            }
        }
Ejemplo n.º 2
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);
            }
        }