2012-03-30 42 views
0

在某些情況下,我需要在我的應用程序中調用FileWatcher onDelete函數。 以下代碼按預期工作。請讓我知道是否有更好的方法來做到這一點。C#中的字符串Split和FileSystemEventArgs參數的用法

  string path = @"C:\File\Test"; 
     string part1, part2; 
     part1 = path.Substring(0, 3); //C:\\ 
     part2 = path.Substring(3 // File\Test 
var fseArgs = new FileSystemEventArgs(WatcherChangeTypes.Deleted, part1, part2); 
onDeleted(path,fseArgs); //FileWacther Delete method 
+0

更好?更好的是什麼?可讀性?可維護性?習慣C#?性能?還有別的嗎? – Oded 2012-03-30 15:24:46

+0

我是Dot Net的新手,試圖確認我正在做正確的方法。泰克斯Oded。 – kanden 2012-03-30 15:26:47

+0

您正在尋求更好的方法來做某些事情(某些代碼),但不要解釋您試圖通過代碼實現的目標。很難推薦任何東西。 – Oded 2012-03-30 15:28:18

回答

0

推測onDeleted是你自己的方法。這是做什麼的?我希望它可能會更簡單,有另一個方法,這是與FileSystemEventArgs無關,直接在你的「場景」中調用,然後讓你的FileSystemEventWatcher處理程序調用它。當你不需要它時,避免耦合到FileSystemEventWatcher

此外,您不應該像這樣使用Substring來執行文件系統路徑操作 - 它最終會非常脆弱。我強烈建議你使用Path中的方法。

在另一方面,你還沒有真正告訴我們很多關於你的背景下...

+0

如果用戶本身刪除了FileSystemWatch文件夾,那麼我正在嘗試爲該文件夾發送一個事件。我曾經檢查過filesystemwatch文件夾是否存在?如果沒有,我會發送FileSystemwatch文件夾的刪除事件 – kanden 2012-03-30 15:29:22

+0

@kanden:但是,您的事件處理程序實際上*做了什麼*?我的觀點是,如果您可以更直接地調用另一個方法,則無需通過事件處理程序。 – 2012-03-30 15:37:01

+0

感謝Jon,你的解決方案很有意義。 – kanden 2012-03-30 20:09:55

0

什麼你正在努力實現 - 是執行一些富邏輯,如果目錄「C:\文件\測試」已被刪除。爲什麼不把這個邏輯提取到Foo()方法,並在兩個地方調用它 - 在OnDeleted事件處理程序中,以及您試圖模擬Deleted事件的地方?

private void OnDeleted(object sender, FileSystemEventArgs e) 
{ 
    if (e.FullPath == @"C:\File\Test") 
     Foo(); 
} 

private void Foo() 
{ 
    // Do something here 
} 

,而不是所有的代碼,只需調用Foo();

+0

感謝您的審查,我同意你的意見。 我的輸入路徑是C:/ Users/hpara/Desktop/HP_File/File。但是在Ondelete Function中(如果你參考上面的代碼),e.FullPath變成「C:/ \ Users/hpara/Desktop/HP_File/File」。這打破了我的路徑操縱 – kanden 2012-03-30 20:12:04

+0

謝謝我發現了另一種方法來解決這個問題。 – kanden 2012-03-30 20:36:33

+0

Actualy e.FullPath應該是「C:\ Users \ hpara \ Desktop \ HP_File \ File」。 – 2012-03-30 20:40:46

0

檢查System.IO.Path,你會發現一些有用的方法存在。

相關問題