Pregunta

Actualmente estoy trabajando en Windows Service para copiar datos de nuestras cámaras de seguridad, ya que se está escribiendo en el directorio de Google Drive en la computadora para la carga instantánea. Los archivos son accesibles inmediatamente después de la creación por el software de reproducción proporcionado, por lo que nos gustaría, si es posible, copiar inmediatamente el flujo de datos, de esa manera tenemos algún video incluso si se interrumpe la grabación (los archivos son bloques de tiempo de 10 minutos).

Actualmente tengo un servicio creado que puede ver el directorio, sin embargo, tengo algunas dificultades para determinar la mejor manera de ver estos archivos. Como se modifican continuamente durante 10 minutos, recibiré un gran número de eventos modificados. Esperaba que pudiera haber una forma en que puedo capturar la creación inicial y comenzar a transmitir los datos a un segundo archivo. Mi preocupación aquí es que necesito asegurarme de que no inviernes el flujo de grabación.

Si esto no es posible o relativamente simple, solo tendré que detectar cuando el archivo ya no se escribe al usar una lógica con la última hora de escritura, pero busco sugerencias sobre cuál es la mejor manera para hacer esto podría ser. Soy consciente de las soluciones propuestas aquí , pero no estoy seguro de si se aplican A la situación con la que estoy tratando. Hay una gran cantidad de archivos dentro de los subdirectorios, por lo que intentan hacer un seguimiento de qué archivos que ya no son los que no se activan los eventos podrían ser muy desordenados. ¿Alguien tiene alguna sugerencia de cómo hacer alguno de estos métodos?

¿Fue útil?

Solución

Podrías intentar hacer esto, pero para ser honesto, esto parece un hackaje y soy escéptico que Windows tiene algún método compatible para hacer lo que está tratando de hacer.Esencialmente estás tratando de escuchar en un flujo de escritura.

Suena como cualquier solución que esté trabajando en este momento es una caja negra, por lo que acceder a la secuencia directamente, probablemente no sea una opción.Sin embargo, hay otro enfoque.Miraría cómo puede crear una unidad virtual con su aplicación en Windows.De esa manera, puede tener la aplicación de la solicitud de grabación en su ruta de la unidad virtual, lo que le permitirá manejar los flujos sin embargo, desee.Lo que puede incluir escribirlos a dos ubicaciones separadas al mismo tiempo.Tanto Google Drive y algún almacenamiento local de algún tipo, por ejemplo.

Aquí hay una pregunta de StackOverFlow sobre cómo crear unidades virtuales que deberían comenzar: C #: Crear una unidad virtual en la computadora

Otros consejos

hmmm ... podría intentar usar un temporizador ... de esta manera, puede limitar cuando se dispara

private Boolean TimeToCheck=false;
public static void Run()
{   Timer timer=new Timer(2000); //2 seconds
    FileSystemWatcher fileWatch=new FileSystemWatcher();
    fileWatch.Path="DirToWatch";
    fileWatch.Filter="fileToWatch";
    fileWatch.Changed += new FileSystemEventHandler(OnChanged);
    fileWatch.Created += new FileSystemEventHandler(OnChanged);
    fileWatch.Deleted += new FileSystemEventHandler(OnChanged);
    //If you want rename, you could use the rename event as well  fileWatch.Renamed += new RenamedEventHandler(OnRenamed);
    timer.Elapsed += new ElapsedEventHandler(timer_done);
    watcher.EnableRaisingEvents = true;
    timer.Enabled = true; // Enable it
}

private static void OnChanged(object source, FileSystemEventArgs e)
{
    if(TimeToCheck)
    {
        TimeToCheck=false;
        timer.Enabled = false; // Enable it
        //move the files
        timer.Enabled = true; // Enable it
    }

}
private static void OnRenamed(object source, RenamedEventArgs e)
{
    if(TimeToCheck)
    {
        TimeToCheck=false;
        timer.Enabled = false; // Enable it
        //move the files
        timer.Enabled = true; // Enable it
    }
}
private static void timer_done(object sender, ElapsedEventArgs e)
{
    TimeToCheck=true;
}

¿Ha mirado el FilesYSystemWatcher ¿Objeto?Si estoy entendiendo la pregunta correctamente, puede ser algo que quiera usar ... Si desea poner este archivo de seguridad dentro de un determinado directorio, puede usar el archivo.copy para mover el inicio de sesión de seguridad actualizado en elCarpeta de Google Drive ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top