我正在寻找某种方法,让我的 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