none
como obtener valor de lo que e copiado, cortado o modificado en windows desde c# RRS feed

  • Pregunta

  • Hola buenas noches, tengo una base datos con una tabla y en un campo tengo todas las rutas y nombres de archivos que estan en el disco c: como inmaginaran son muchos registros, pues he relaizado un select de todos los archivos que hay en el windows, tengo otro campo que crea un hash por cada archivo quedando algo como esto:

    pero supongo que yo quiera monitorizar el estatus de cada archivo y su hash, si por ejemplo modifico un archivo y genera otro hash

    como puedo saber eso?? existe una posibilidad de poder detectar cuando, copio, modifico, pego un archivo cualquiera de la computadora desde un programa en c#, se puede detectar eso?? si estoy copiando una cadena de caracteres o si estoy copiando y pegando un archivo desde windows para una vez sabiendo eso solo modificar el hash del archivo modificado? gracias

    martes, 28 de noviembre de 2017 5:27

Respuestas

  • Buenas,

    Puedes utilizar

    FileSystemWatcher

    Para monitorizar una carpeta y su contenido, de modo que sepas cuando cambia un archivo dentro de ella o sus subcarpetas.

    Luego se trata de cuando se dispare el evento, que hagas el cálculo del hash de nuevo y todo lo que necesites. 

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 28 de noviembre de 2017 6:47

Todas las respuestas

  • Lamentablemente entiendo muy poco de Hash, pero al caso de saber la infomración de un archivo puedes recurrir a FileInfo de SYstem.IO

    https://msdn.microsoft.com/es-es/library/system.io.fileinfo(v=vs.110).aspx

    Como verás te dara la información del achivo en cuanto a tamaño, ultima mofificación,

    No se si es esto lo que buscas

    Saludos

    martes, 28 de noviembre de 2017 5:38
  • Buenas,

    Puedes utilizar

    FileSystemWatcher

    Para monitorizar una carpeta y su contenido, de modo que sepas cuando cambia un archivo dentro de ella o sus subcarpetas.

    Luego se trata de cuando se dispare el evento, que hagas el cálculo del hash de nuevo y todo lo que necesites. 

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 28 de noviembre de 2017 6:47
  • Hola buenas madrugadas amigo Turrado!, gracias por la respuesta que me ha sido acertada, consegui este ejemplito en youtube, que me sirve casi todo, te lo publico: https://www.youtube.com/watch?v=nFz0i0PM3Hg

    pero Turrado tengo este problema, veras en el ejemplo se debe especificar el directorio que yo quiero revisar donde están los archivos que quiero monitorear: 

      FileSystemWatcher Observador = new FileSystemWatcher(@"C:\Temporal");

    Pero el programa que yo estoy desarrollando tiene que tener la posibilidad de poder hacerlo con cualquier archivo de cualquier carpeta de la unidad osea: C:\

    Osea como puedo capturar la ruta completa del archivo que yo seleccione, si lo hago con el mause o desde el teclado, me explico?, osea que si yo hago click en C: y luego me meto en un carpeta, luego en otra y modifico un archivo entonces yo pueda capturar la ruta completa para hacer el proceso que realiza el programa que te he publicado, como podria hacer eso desde un programa de c# de tipo consola???. Gracias

    viernes, 1 de diciembre de 2017 4:45
  • Buenas,

    En el link que te puse, abajo, viene un ejemplo en consola de como hacerlo, de todos modos, te pongo un ejemplo en consola, que monitoriza todos los archivos de tipo .txt

    using System;
    using System.IO;
    
    namespace Test
    {
      class Program
      {
        static void Main(string[] args)
        {
          FileSystemWatcher m_watcher;
          m_watcher = new FileSystemWatcher();
          //Ruta a monitorizar
          m_watcher.Path = "C:\\";
          //Filtro de archivos (opcional)
          m_watcher.Filter = "*.txt";
          //Incluir subdirectorios
          m_watcher.IncludeSubdirectories = true;
          //Eventos 
          m_watcher.Changed += new FileSystemEventHandler(OnChanged);
          m_watcher.Created += new FileSystemEventHandler(OnChanged);
          m_watcher.Deleted += new FileSystemEventHandler(OnChanged);
          m_watcher.Renamed += new RenamedEventHandler(OnRenamed);
          //Filtro de notificaciones
          m_watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
          //Iniciar el watcher
          m_watcher.EnableRaisingEvents = true;
    
          Console.Read();     
        }
        private static void OnChanged(object source, FileSystemEventArgs e)
        {
          // Specify what is done when a file is changed, created, or deleted.
          Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
        }
    
        private static void OnRenamed(object source, RenamedEventArgs e)
        {
          // Specify what is done when a file is renamed.
          Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
        }
      }
    }
    

    El resultado es este

    Si tienes dudas comentanos


    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:


    viernes, 1 de diciembre de 2017 13:46