2016-03-20 2 views
1

У меня возникли проблемы с пониманием того, как FileSystemWatcher должен работать. Я пытаюсь заставить мой код ждать существования файла, а затем вызвать другую функцию. Мой код выглядит следующим образом:FileSystemWatcher ArgumentException

строка path2 = @ "N: \ reuther \ TimeCheck \ cavmsbayss.log";

 FileSystemWatcher fw = new FileSystemWatcher(path2); 
     fw.Created += fileSystemWatcher_Created; 

Тогда у меня есть отдельная функция, которая должна обрабатывать файл после его событие называется:

 static void fileSystemWatcher_Created(object sender, FileSystemEventArgs e) 
    { 
     MessageBox.Show("Ok im here now"); 
    } 

Но это

Имя директории N: \ Ройтер \ TimeCheck \ cavmsbayss .log недействителен.

+0

Вы можете посмотреть каталог, а не файл. [MSDN] (https://msdn.microsoft.com/en-us/library/b36854c3 (v = vs.110) .aspx) –

+0

Нет ли способа отслеживать создание файла? –

+0

Должно быть, как только событие 'Created' срабатывает. –

ответ

3

Согласно docs, параметр path указывает:

каталог для мониторинга, в стандартном или Universal Naming Convention (UNC) нотации.

Pass это путь к каталогу, а не конкретный файл:

string pathToMonitor = @"N:\reuther\TimeCheck"; 
FileSystemWatcher fw = new FileSystemWatcher(pathToMonitor); 
fw.EnableRaisingEvents = true; // the default is false, you may have to set this too 
fw.Created += fileSystemWatcher_Created; 

Тогда просто следить за созданием этого файла, используя либо свойство Name или FullPath в FileSystemEventArgs классе:

static void fileSystemWatcher_Created(object sender, FileSystemEventArgs e) 
{ 
    if (e.Name == "cavmsbayss.log") 
    { 
     MessageBox.Show("Ok im here now"); 
    } 
} 
+0

У меня проблема с этим кодом ... Я попытался использовать его: string desktopPath = Environment.GetFolderPath (Environment.SpecialFolder.Desktop); строка path2 = desktopPath + @ "\" + @ "RaidTimestamps \"; FileSystemWatcher fw = new FileSystemWatcher (путь2); fw.Created + = fileSystemWatcher_Created; static void fileSystemWatcher_Created (отправитель объекта, FileSystemEventArgs e) { MessageBox.Show (e.Name); if (e.Name == "orvmsnw1ss.log") {MessageBox.Show ("Ok im here here"); } } –

+0

С вышеуказанным ничего не отображается вообще. Значение кода не выполняется, хотя я знаю, что путь на 100% правильный. –

+0

Попробуйте разместить точку прерывания в первой строке метода 'fileSystemWatcher_Created'. Поражает ли это вообще? Проверьте значения 'e.Name' и' e.FullName', чтобы убедиться, что они ожидаются. –