如何追蹤 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);
                }
            }
        }
    }
}

相關內容