Windows で特定のファイルのサイズの変化を追跡するにはどうすればよいですか?

Windows で特定のファイルのサイズの変化を追跡するにはどうすればよいですか?

SQL データベース ログ ファイルのサイズdatabaseName.ldfが変化する時間を監視して、SQL クエリが実行された時間と比較し、どの SQL クエリ/動作がdatabaseName.ldfファイルのサイズに最も大きな影響を与えているかを判断したいと考えています。

私は次のようなサードパーティのツールを試しましたサイズは重要そしてフォルダ変更ビューしかし問題は、最新の変更のみが記録されることです。時間の経過に伴うファイル サイズの変化をすべて確認したかったのです。

非ポーリング方式を使用するか、イベントによってトリガーされる方が望ましいです。

答え1

SysInternals プロセス モニター次のフィルターが役立つ場合があります:

  • パス: databaseName.ldf(可能であればフルパスを推奨)
  • 手術:WriteFile

テストが終了したら、評価用に CSV または XML として保存できます。残念ながら、ファイル サイズは詳細列にあります。これは、興味のないその他の情報を含むテキスト列です。ログ ファイルは追加される可能性が高いため、合計の長さ (オフセット + 長さ) を自分で計算する必要があります。

仮想ログファイルのスクリーンショット


C#のコーディングスキルがあれば、ファイルシステムウォッチャー利点: 自分に最適な形式でログインできます。欠点: バグがある可能性のある、テストされていないスパゲッティ コードです。

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);
                }
            }
        }
    }
}

関連情報