如何跟踪 Windows 中某个文件的大小变化?

如何跟踪 Windows 中某个文件的大小变化?

我想监视 SQL 数据库日志文件大小变化的时间,databaseName.ldf以便我可以将其与执行 SQL 查询的时间进行比较,以确定哪些 SQL 查询/行为对文件大小的影响最大databaseName.ldf

我尝试过第三方工具,例如大小事项文件夹更改视图但问题是他们只记录最新的更改。我想查看文件大小随时间的所有变化。

如果它使用非轮询方法或者由事件触发,我会更喜欢。

答案1

SysInternals 进程监视器可能会对以下过滤器有帮助:

  • 路径:(databaseName.ldf尽可能使用完整路径)
  • 手术:WriteFile

测试结束后,您可以将其保存为 CSV 或 XML 以供评估。不幸的是,文件大小在详细信息列中,这是一个文本列,其中包含您不感兴趣的其他内容。由于日志文件可能会被附加,因此您需要自己计算总长度(偏移量 + 长度)。

假设日志文件的屏幕截图


凭借一些 C# 编码技能,您可以使用文件系统观察器。优点:您可以以最适合您的格式登录。缺点:未经测试的 Spaghetti 代码可能存在错误。

using System;
using System.IO;

namespace FileSizeChangeLogger
{
    static class Program
    {
        static long lastSize;
        static FileInfo file = new FileInfo(@"D:\temp\myfilename.txt");

        static void Main()
        {
            lastSize = file.Length;

            var watcher = new FileSystemWatcher {Path = file.DirectoryName};
            watcher.Changed += OnFileChange;

            while (true)
            {
                watcher.WaitForChanged(WatcherChangeTypes.Changed);
            }
        }

        private static void OnFileChange(object sender, FileSystemEventArgs e)
        {
            if (e.FullPath.Equals(file.FullName, StringComparison.InvariantCultureIgnoreCase))
            {
                file.Refresh();
                var newSize = file.Length;
                if (newSize != lastSize)
                {
                    Console.WriteLine(file.Length);
                }
            }
        }
    }
}

相关内容