0

タイトルが言うように、特定の (ユーザーが指定した) サブストリングを持つ FOLDERS の名前を取得する必要があります。

ユーザーが必要な部分文字列を入力するテキスト ボックスがあります。目標を達成するために以下のコードを使用しています。

 string name = txtNameSubstring.Text;
            string[] allFiles = System.IO.Directory.GetFiles("C:\\Temp");//Change path to yours
            foreach (string file in allFiles)
            {
                if (file.Contains(name))
                {
                    cblFolderSelect.Items.Add(allFiles);
                    // MessageBox.Show("Match Found : " + file);
                }
                else
                {
                    MessageBox.Show("No files found");
                }
            }

それは動作しません。トリガーすると、メッセージボックスのみが表示されます。ヘルプ ?

4

3 に答える 3

1

MessageBox部分文字列を含まない最初のパスに が表示されるため

フォルダーを取得するために使用できますが、使用しないLinq必要がありますGetDirectoriesGetFiles

string name = txtNameSubstring.Text;
var allFiles = System.IO.Directory.GetDirectories("C:\\Temp").Where(x => x.Contains(name));//

if (!allFiles.Any())
{
   MessageBox.Show("No files found");
}

cblFolderSelect.Items.AddRange(allFiles);
于 2013-08-23T06:58:22.027 に答える
1

適切な APIを使用して、フレームワークがディレクトリをフィルター処理できるようにすることができます。

var pattern = "*" + txtNameSubstring.Text + "*";
var directories = System.IO.Directory.GetDirectories("C:\\Temp", pattern);
于 2013-08-23T07:17:11.847 に答える
0

ループ内にメッセージ ボックスを入れたくありません。

string name = txtNameSubstring.Text;
string[] allFiles = System.IO.Directory.GetFiles("C:\\Temp");//Change path to yours
foreach (string file in allFiles)
{
   if (file.Contains(name))
   {
      cblFolderSelect.Items.Add(file);
      // MessageBox.Show("Match Found : " + file);
   }
}
if(cblFolderSelect.Items.Count==0)
{
   MessageBox.Show("No files found");
}

cblFolderSelect(このコードが実行される前は空だったと仮定します)

現在のように、調べるファイルごとにメッセージ ボックスを表示するかどうかを決定しています。したがって、最初のファイルが一致しない場合、次のファイルが一致する可能性がある場合でも、「ファイルが見つかりません」と表示されます。

(すべてのファイルではなく、一致する個々のファイルを追加するように変更しましたAdd(1つ以上の一致))

于 2013-08-23T06:56:54.787 に答える