私のアプリケーションでは、ルートフォルダを選択した後にWiresharkファイルを追加するオプションを追加したいと思います。
このクラスを使用して、ルートフォルダー(アクセスする権限があるすべてのフォルダー)からすべてのファイルを取得しています。
public static class SafeFileEnumerator
{
public static IEnumerable<string> EnumerateDirectories(string parentDirectory, string searchPattern, SearchOption searchOpt)
{
try
{
var directories = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
directories = Directory.EnumerateDirectories(parentDirectory).SelectMany(x => EnumerateDirectories(x, searchPattern, searchOpt));
}
return directories.Concat(Directory.EnumerateDirectories(parentDirectory, searchPattern));
}
catch (UnauthorizedAccessException ex)
{
return Enumerable.Empty<string>();
}
}
public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOpt)
{
try
{
var dirFiles = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
dirFiles = Directory.EnumerateDirectories(path).SelectMany(x => EnumerateFiles(x, searchPattern, searchOpt));
}
return dirFiles.Concat(Directory.EnumerateFiles(path, searchPattern));
}
catch (UnauthorizedAccessException ex)
{
return Enumerable.Empty<string>();
}
}
}
[ディレクトリの追加]ボタンをクリックした後:
private void btnAddDir_Click_1(object sender, EventArgs e)
{
string fileToAdd = string.Empty;
DialogResult dialog = folderBrowserDialog1.ShowDialog();
if (dialog == DialogResult.OK)
{
Editcap editcap = new Editcap();
foreach (string fileName in SafeFileEnumerator.EnumerateFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories))
{
if (editcap.isWiresharkFormat(fileName))
{
if (editcap.isLibpcapFormat(fileName))
{
listBoxFiles.Items.Add(fileName);
}
else if (!editcap.isLibpcapFormat(fileName))
{
listBoxFiles.Items.Add(editcap.getNewFileName(fileName));
}
}
}
}
}
Editcap editcap = new Editcap();
-ファイルが2つのメソッドを持つ有効なWiresharkファイルであるかどうかをチェックする私のクラス:isWiresharkFormat
とisLibpcapFormat
。getNewFileName
-ファイルがpcapファイルでない場合は、pcapファイルに変換されます。
私が欲しいのは、GUIがブロックされないように、リストボックスに追加されたすべての正しいファイル(Wiresharkファイル)を別のスレッドで追加することです。理想的には、各ファイルが見つかった後、すべてのファイルが評価されるまで待たずに、すぐにリストボックスに追加されます。