Pergunta

Atualmente, estou trabalhando no serviço do Windows para copiar dados de nossas câmeras de segurança à medida que são gravados no diretório do Google Drive no computador para upload instantâneo.Os arquivos são acessíveis imediatamente após a criação pelo software de reprodução fornecido, por isso gostaríamos, se possível, de copiar imediatamente o fluxo de dados, dessa forma teremos algum vídeo mesmo que a gravação seja interrompida (os arquivos são blocos de tempo de 10 minutos).

Atualmente tenho um serviço criado que pode monitorar o diretório, porém estou tendo alguma dificuldade em determinar a melhor forma de monitorar esses arquivos.Como eles são modificados continuamente por 10 minutos, receberei um grande número de eventos alterados.Eu esperava que houvesse uma maneira de capturar a criação inicial e começar a transmitir os dados para um segundo arquivo.Minha preocupação aqui é que preciso garantir que não ultrapassarei o fluxo de gravação.

Se isso não for possível ou relativamente simples, terei apenas que detectar quando o arquivo não está mais sendo gravado usando alguma lógica com o horário da última gravação, mas estou procurando sugestões sobre qual a melhor maneira de fazer isso pode ser.Estou ciente das soluções propostas Aqui, mas não tenho certeza se eles se aplicam à situação com a qual estou lidando.Há um grande número de arquivos em subdiretórios, portanto, tentar controlar quais arquivos que possuo não estão mais acionando eventos pode ser muito confuso.Alguém tem alguma sugestão sobre como fazer um desses métodos?

Foi útil?

Solução

Você poderia tentar fazer isso, mas para ser honesto, isso parece um hack e eu sou cético que o Windows tem algum método suportado para fazer o que você está tentando fazer.Essencialmente você está tentando ouvir em um fluxo de escrita.

Parece qualquer solução que você trabalha agora é uma caixa preta, então acessando o fluxo diretamente provavelmente não é uma opção.No entanto, há outra abordagem.Eu olharia como você pode criar uma unidade virtual com seu aplicativo no Windows.Dessa forma, você pode ter o aplicativo de gravação escrevendo para o seu caminho de unidade virtual, que permitirá que você lide com os fluxos, mas você gosta.O que pode incluir escrevê-los a dois locais separados ao mesmo tempo.Tanto o Google Drive quanto um armazenamento local de algum tipo, por exemplo.

Aqui está uma pergunta de STACKOVER sobre como criar unidades virtuais que devem começar: C #: Crie uma unidade virtual no computador

Outras dicas

Hmmm...Você poderia tentar usar um timer...Dessa forma, você pode limitar quando ele 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;
}

Você já olhou para o filesystemwatcher objeto?Se estou entendendo a pergunta corretamente, pode ser algo que você pode querer usar .... Se você fosse colocar este arquivo de segurança dentro de um determinado diretório, poderá usar o arquivo.copy para mover o log de segurança atualizado noPasta do Google Drive ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top