2012-03-30 19 views
0

場合によっては、アプリケーションでFileWatcher onDelete関数を呼び出す必要があります。 次のコードは期待どおりに機能します。これを行うより良い方法があれば教えてください。C#での文字列分割と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

+0

私はDot Netを初めて使い、正しい方法で行っていることを確認しようとしています。トッド。 – kanden

+0

あなたは何かをする良い方法を(いくつかのコード)求めていますが、コードで達成しようとしていることを説明していません。何かを推薦するのが難しくなります。 – Oded

答えて

0

おそらくonDeletedはあなた自身の方法です。それは何ですか?私はそれがFileSystemEventArgsに関連していなかったもう1つのメソッドを持っていることがかなり簡単かもしれないと思って、あなたのFileSystemEventWatcherハンドラもそれを呼び出すようにしてください。あなたが本当にそれを必要としないときはFileSystemEventWatcherへのカップリングを避けてください。

さらに、このようにSubstringを使用してファイルシステムのパス操作を実行する必要はありません。非常に脆くなってしまいます。 Pathの方法を使用することを強くお勧めします。

一方で、あなたは本当にあなたが達成しようとしている何

+0

ユーザーがFileSystemWatchフォルダ自体を削除した場合、そのフォルダのイベントを送信しようとしています。 filesystemwatchフォルダが存在するかどうかを確認するのに使用されましたか?そうでない場合、私はFileSystemwatchフォルダの削除イベントを送信します – kanden

+0

@ kanden:実際にあなたのイベントハンドラは何をしますか?私のポイントは、他のメソッドをもっと直接的に呼び出すことができれば、イベントハンドラを経由する必要はないということです。 –

+0

Jonに感謝して、あなたのソリューションは理にかなっています。 – kanden

0

...私達にあなたの状況について多くを語っていない - ディレクトリならば、いくつかのFooロジックを実行することで、「C:\ファイル\テスト」削除されました。 Foo()メソッドにロジックを抽出し、OnDeletedイベントハンドラと、Deletedイベントをエミュレートしようとする場所の2つの場所で呼び出すのはなぜでしょうか?代わりに、すべてのコードの

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関数の中で(上記のコードを参照すると)、e.FullPathは "C:/¥Users/hpara/Desktop/HP_File/File"になります。これは私のパス操作を破る – kanden

+0

私はこのisuueを解決する別の方法を見つけた。 – kanden

+0

実際のe.FullPathは "C:¥Users¥hpara¥Desktop¥HP_File¥File"である必要があります。 –

0

チェックSystem.IO.Pathを呼び出して、あなたはそこにいくつかの有用な方法を見つけるでしょう。

関連する問題