为特定目录中新创建的 10 GB 文件创建系统事件

为特定目录中新创建的 10 GB 文件创建系统事件

我正在寻找某种方法,让我的 Windows Small Business Server 2011 计算机能够在特定目录中新建 10 GB 或更大的文件时自动创建系统事件。似乎最理想的工具是文件系统资源管理器,但使用它我只能为整个目录设置硬/软配额,而不能单独创建新的文件。文件屏蔽似乎也不起作用。我该如何利用我拥有的工具实现我的目标?

答案1

你没有提到你有什么“工具”,所以我将使用这些工具给你一个答案有。

我这样做的方法是实现一个在后台运行的简单 C# 程序,甚至可能是一个服务。它将实现 FileSystemWatcher 类,并订阅创建事件,如果我没有看错的话,这就是您要监视的内容。一旦事件被引发/触发,请写入您的事件日志条目。

现在你提到了设置配额?你可能需要进一步阐述,之后我会更新我的答案,因为这有点令人困惑,你是说你想否定有人会在特定文件夹中创建 10GB 的文件吗?我的下一节将假设如此。

在写入事件日志条目之后(或之前),您可以简单地删除已写入的文件,从而启用“配额”。配额不允许您写入超出配额的文件,因此如果文件写入后立即删除,则不会造成损失。当然,代码胜过千言万语,所以

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

相关内容