수색…


통사론

  • Public FileSystemWatcher ()
  • 공용 FileSystemWatcher (문자열 경로)
  • 공용 FileSystemWatcher (문자열 경로, 문자열 필터)

매개 변수

통로 필터
표준 또는 범용 명명 규칙 (UNC) 표기법으로 모니터링 할 디렉터리입니다. 보고자하는 파일의 유형. 예를 들어 "* .txt"는 모든 텍스트 파일의 변경 사항을 감시합니다.

기본 FileWatcher

다음 예제는 런타임에 지정된 디렉토리를보기 위해 FileSystemWatcher 를 만듭니다. 구성 요소는 LastWriteLastAccess 시간의 변경, 디렉토리의 텍스트 파일 작성, 삭제 또는 이름 변경을 감시하도록 설정됩니다. 파일이 변경, 작성 또는 삭제되면 파일 경로가 콘솔에 인쇄됩니다. 파일의 이름이 바뀌면 이전 경로와 새 경로가 콘솔에 인쇄됩니다.

이 예제에서는 System.Diagnostics 및 System.IO 네임 스페이스를 사용합니다.

FileSystemWatcher watcher;

private void watch()
{
  // Create a new FileSystemWatcher and set its properties.
  watcher = new FileSystemWatcher();
  watcher.Path = path;

 /* Watch for changes in LastAccess and LastWrite times, and
       the renaming of files or directories. */
  watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                         | NotifyFilters.FileName | NotifyFilters.DirectoryName;

  // Only watch text files.      
  watcher.Filter = "*.txt*";

  // Add event handler.
  watcher.Changed += new FileSystemEventHandler(OnChanged);
  // Begin watching.      
  watcher.EnableRaisingEvents = true;
}

// Define the event handler.
private void OnChanged(object source, FileSystemEventArgs e)
{
  //Copies file to another directory or another action.
  Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

IsFileReady

일반적인 실수 FileSystemWatcher로 시작하는 많은 사람들이 파일을 만든 즉시 FileWatcher 이벤트가 발생한다는 사실을 고려하지 않았습니다. 그러나 파일을 마치는 데 약간의 시간이 걸릴 수 있습니다.

:

예를 들어 1GB의 파일 크기를 사용하십시오. apr 파일은 다른 프로그램 (Explorer.exe는 어딘가에서 복사)에 의해 생성되었지만 프로세스를 완료하는 데 몇 분이 걸립니다. 이 이벤트는 생성 시간이 길어지고 파일을 복사 할 준비가 될 때까지 기다려야합니다.

파일 준비 여부를 확인하는 방법입니다.

 public static bool IsFileReady(String sFilename)
{
    // If the file can be opened for exclusive access it means that the file
    // is no longer locked by another process.
    try
    {
        using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
        {
            if (inputStream.Length > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
    }
    catch (Exception)
    {
        return false;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow