Windows에서 특정 파일의 크기 변경을 추적하는 방법은 무엇입니까?

Windows에서 특정 파일의 크기 변경을 추적하는 방법은 무엇입니까?

어떤 SQL 쿼리/동작이 내 데이터베이스 크기에 가장 큰 영향을 미치는지 확인하기 위해 SQL 데이터베이스 로그 파일의 크기가 databaseName.ldf변경되는 시간을 모니터링하여 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);
                }
            }
        }
    }
}

관련 정보