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: