Criando um evento do sistema para arquivos 10 Gig recém-criados em um diretório específico

3

Estou procurando uma forma de a máquina do Windows Small Business Server 2011 criar automaticamente eventos do sistema sempre que houver um arquivo recém-criado de 10 GB ou mais em um diretório específico. Parece que a ferramenta ideal para usar é o Gerenciador de Recursos de Sistema de Arquivos, mas com isso eu só posso definir cotas de hard / soft para um diretório total, não criados individualmente novos arquivos . As telas de arquivos também não parecem fazer o truque. Como posso alcançar meus objetivos com as ferramentas que tenho?

    
por user3097210 12.12.2013 / 23:14

1 resposta

2

Você não mencionou as "ferramentas" que possui, por isso, darei uma resposta usando as ferramentas I .

A maneira que eu faria isso é implementar um programa C # simples que é executado em segundo plano, talvez até mesmo um serviço. Ele implementaria a classe FileSystemWatcher e assinaria o evento Created , se eu lesse a sua pergunta corretamente, isso é o que você quer monitorar. Quando o evento for disparado / acionado, escreva sua entrada no registro de eventos.

Agora, você mencionou a definição de cotas ? Você pode ter que expandir isso e eu atualizar minha resposta depois, porque é um pouco confuso, você está dizendo que você quer negar pessoas criando arquivos de 10GB em uma pasta específica? Minha próxima seção assume isso.

Após (ou antes) escrever sua entrada no registro de eventos, você pode simplesmente apagar o arquivo que foi gravado, permitindo assim uma 'cota'. As cotas não permitem que você grave arquivos além da cota, portanto, não é uma perda se o arquivo foi gravado e, em seguida, excluído imediatamente. Claro, o código vale mais que mil palavras, então

using System;
using System.IO;
using System.Diagnostics;
using System.Security.Permissions;

public class Watcher
{

    public static void Main()
    {
    Run();

    }

    public static void Run()
    {

        string path = "C:\MyDocs";

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = path;

        /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;

        // Add event handlers.
        watcher.Created += new FileSystemEventHandler(OnChanged);

        // Begin watching.
        watcher.EnableRaisingEvents = true;

        while(true);
        // Do nothing but wait for files created.
    }

    // Define the event handlers. 
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is created

        //Test for file size
        FileInfo flNewFile = new FileInfo(e.FullPath);

        if(flNewFile.length > 10737418239)  //Google says 10GB = 10737418240, so I subtracted one byte and used that as a test.
        {
            //Write to event log.
            EventLog elApplication = new EventLog("Application");
            myLog.Source = "MyAppName";

            myLog.WriteEntry("File size too big for this folder. File " + e.FullPath + " will be deleted.", EventLogEntryType.Warning);

            flNewFile.Delete();
        }   

    }

}

Referências:

link link link

    
por 22.02.2014 / 16:07