37

ファイルまたはディレクトリが削除されたかどうかを FSW で判断する方法はありますか?

4

4 に答える 4

43

fletcherのソリューションの簡略化および修正されたバージョンは次のとおりです。

namespace Watcher
{
    class Program
    {
        private const string Directory = @"C:\Temp";
        private static FileSystemWatcher _fileWatcher;
        private static FileSystemWatcher _dirWatcher;

        static void Main(string[] args)
        {
             _fileWatcher = new FileSystemWatcher(Directory);
             _fileWatcher.IncludeSubdirectories = true;
             _fileWatcher.NotifyFilter = NotifyFilters.FileName;
             _fileWatcher.EnableRaisingEvents = true;
             _fileWatcher.Deleted += WatcherActivity;

            _dirWatcher = new FileSystemWatcher(Directory);
            _dirWatcher.IncludeSubdirectories = true;
            _dirWatcher.NotifyFilter = NotifyFilters.DirectoryName;
            _dirWatcher.EnableRaisingEvents = true;
            _dirWatcher.Deleted += WatcherActivity;

            Console.ReadLine();
        }

        static void WatcherActivity(object sender, FileSystemEventArgs e)
        {
            if(sender == _dirWatcher)
            {
                Console.WriteLine("Directory:{0}",e.FullPath);
            }
            else
            {
                Console.WriteLine("File:{0}",e.FullPath);
            }
        }
    }
}
于 2010-07-26T18:15:08.273 に答える
1

最初は「パス」機能を一時的に使用しますが、後で削除しない場合は、Directory.Exists で修正します。ただし、削除のケースは修正されません

bool isDirectory = Path.GetExtension(e.FullPath) == string.Empty;


if (e.ChangeType != WatcherChangeTypes.Deleted)
{
    isDirectory = Directory.Exists(e.FullPath);
}
于 2014-03-26T02:53:12.533 に答える
-1

FileSystemEventArgs.FullPathプロパティを調べて、それがディレクトリかファイルかを判断できます。

if (Path.GetFileName(e.FullPath) == String.Empty) 
{
    //it's a directory.
}

ファイルかディレクトリかを確認します。

于 2010-07-26T16:09:10.527 に答える