C#中的文件大小监控

时间:2010-04-16 13:30:37

标签: c# windows filesystems

我在系统和工作中工作管理团队已经完成了创建配额管理应用程序的任务,试图鼓励用户更好地管理资源,因为我们目前存在磁盘空间问题而且没有强制执行硬配额。

目前,我正在使用下面的代码浏览用户主页空间中的所有文件,以检索他们正在使用的总空间量。从我所看到的其他地方来看,在C#中没有别的方法可以做到这一点,它的问题是它们的开销非常高,而它退出每个文件的大小然后创建一个总数。

try
{
    long dirSize = 0;
    FileInfo[] FI = new DirectoryInfo("I:\\").GetFiles("*.*", SearchOption.AllDirectories);
    foreach (FileInfo F1 in FI)
    {
        dirSize += F1.Length;
    }

    return dirSize;
}

所以我正在寻找一种更快的方法来实现这一目标,或者通过FileSystemWatcher使用可用的选项来快速监控文件大小的变化。目前,我唯一能想到的是创建一个包含每个文件的文件位置和大小的哈希表,因此当发生大小更改事件时,我可以将旧大小与新大小进行比较并更新总数。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

就尝试编写自己的管理系统而言,位置和大小表并不是一个坏主意。也许可以将一些xmlserialization和linq合并到xml中进行报告等等。我认为你已经在决定使用FileSystemWatcher的正确途径

答案 1 :(得分:2)

我同意David的观点,使用FileSystemWatcher意味着您只需要计算目录何时更改。

当目录内容发生变化时,只需找出已更改的内容并从那里开始。

使用Changed事件。

答案 2 :(得分:1)

你知道你可以enforce quotas on NTFS volumes via Windows吗?当操作系统原生支持时,为什么要自己动手?