あなたが質問を正しく理解している場合(選択したディレクトリ内のファイルだけでなくサブディレクトリも表示したい場合)、DirectoryInfoクラスのGetDirectoriesメソッドを調べることをお勧めします。
は、あなたはおそらく、このような何かを行うことができます:
DirectoryInfo di = new DirectoryInfo(strSelectedPath);
// first list sub-directories
DirectoryInfo[] dirs = di.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
listView1.Items.Add(dir.Name);
}
// then list the files
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
listView1.Items.Add(file.Name);
}
更新:私はあなたがパス(ListDirectoryContents(string path)
のようなもの)のための文字列パラメータを受け取り、別の方法に上記のコードを動かすことを示唆しています。この方法では、リストビューからアイテムを消去し、ラベルテキストを設定して、上のように新しいコンテンツを追加することから始められます。
このメソッドは、btnOpen_Click
メソッドから呼び出すことができ、folderBrowserDialog1.SelectedPath
をpathパラメーターに渡します。
通常、私のイベントハンドラは可能な限り小さくしてください。実際の作業は実行しないでください。作業を行う他のメソッドを呼び出すことをお勧めします。これは、他の場所から同じ機能をトリガするためにもう少し多くを開きます。
たとえば、アプリケーションでパスをコマンドラインパラメータとして使用できるとすれば、コマンドラインからのパスにListDirectoryContents
を呼び出すだけで、フォームで同じ動作が繰り返されるよりも洗練されたコードになります。そのアプローチの
完全なコード例:このコードの
private void btnOpen_Click(object sender, EventArgs e)
{
string path = BrowseForFolder();
if (path != string.Empty)
{
ListDirectoryContent(path);
}
}
private string BrowseForFolder()
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
return fbd.SelectedPath;
}
return string.Empty;
}
private void ListDirectoryContent(string path)
{
label1.Text = path;
listView1.Items.Clear();
DirectoryInfo di = new DirectoryInfo(path);
// first list sub-directories
DirectoryInfo[] dirs = di.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
listView1.Items.Add(dir.Name);
}
// then list the files
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
listView1.Items.Add(file.Name);
}
}
五分五分では、フォルダを参照する必要があるとき、それは単に選択されたパスを返していないので、あなたは、メソッドのBrowseForFolderを再利用することができるということですパスが使用される場所に接続されます。同様に、ListDirectoryContentメソッドは、pathパラメータがどこから来るのか全く知らない。それはフォルダブラウザから来るかもしれません、それはコマンドラインかどこからでも来るかもしれません。
「コアタスク」のみを実行するメソッドに焦点を当てる場合、必要な追加情報の入力パラメータに依存すると、再利用と保守が容易なコードが得られます。
イベントハンドラ(btnOpen_Clickなど)に関しては、それらをトリガとして見たいのですが、彼らは起こることを引き起こしますが、実際には多くのことをしません。
私は、ListDirectoryContentに名前を割り当てただけですか?または別の名前を選択することはできますか? – tintincutes