Назад | Перейти на главную страницу

Создание системного события для недавно созданных 10-гигабайтных файлов в определенном каталоге

Я ищу способ, которым мой компьютер с Windows Small Business Server 2011 может автоматически создавать системные события каждый раз, когда в определенном каталоге появляется вновь созданный файл размером 10 ГБ и более. Кажется, что идеальным инструментом для использования является диспетчер ресурсов файловой системы, но с его помощью я могу установить только жесткие / мягкие квоты для всего каталога, а не индивидуально. новый файлы. Файловые экраны, похоже, тоже не помогают. Как я могу достичь своих целей с помощью имеющихся у меня инструментов?

Вы не упомянули, какие у вас есть «инструменты», поэтому я дам вам ответ, используя инструменты. я иметь.

Я бы сделал это, реализовав простую программу на C #, работающую в фоновом режиме, возможно, даже службу. Он будет реализовывать класс FileSystemWatcher и подписываться на Создано событие, если я правильно прочитал ваш вопрос, это то, что вы хотите контролировать. Как только событие возникнет / инициируется, запишите запись в журнал событий.

Теперь вы упомянули настройку квоты? Возможно, вам придется расширить это, и я обновлю свой ответ позже, потому что это немного сбивает с толку, вы говорите, что хотите Отрицать люди создают файлы размером 10 ГБ в определенной папке? Мой следующий раздел предполагает это.

После (или до) записи записи в журнал событий вы можете просто стереть записанный файл, тем самым включив «квоту». Квоты не позволяют записывать файлы сверх квоты, поэтому не будет проблем, если файл был записан, а затем немедленно удален. Конечно, код стоит тысячи слов, поэтому

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();
        }   

    }

}

Ссылки:

http://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs.fullpath(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/system.io.fileinfo.delete(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/fc682h09(v=vs.110).aspx