ディレクトリ内の、パスを含まないファイル名だけを ListBox に表示したい


`Button` をクリックするとディレクトリを選択するダイアログを表示し、選択したディレクトリに存在する txt ファイルを `ListBox`
に表示させようと思いました。コードを実行し、無事に指定したディレクトリに存在する txt ファイルを `ListBox` に表示することはできましたが、
`ListBox` に表示されたデータは、`C:\`からはじまる絶対パス付きで表示されています。

以下が書いたコードの一部になります。

[code]

     var Dialog = new CommonOpenFileDialog();
     var Result = Dialog.ShowDialog();
     if (Result == CommonFileDialogResult.Ok)
     {
         var Directory = Dialog.FileName;
         string[] files = System.IO.Directory.GetFiles(Directory, "*.txt");
         listBox1.Items.AddRange(files);
     }
    
[/code]

これを実行すると `ListBox` にパス付きでファイル名が表示されます。どうにか `ファイル名.txt`
のみを表示させたいのですが、うまくいっていません。調べてみたところ、 `GetFileName`を使う方法があるようですが、どうもうまくいきません。

何か方法がありましたら、教えていただけないでしょうか？

※ ちなみにディレクトリの選択するダイアログには、 Windows API CodePack を使用しています。



[code]

    var directoryInfo = new DirectoryInfo(dialog.FileName);
    listBox1.DataSource = directoryInfo.GetFiles("*.txt");
    listBox1.DisplayMember = "Name";
    
[/code]

こんな方法もあります。listBox1にはFileInfo配列を渡し、FileInfoクラスのNameプロパティを画面に表示するように指示できます。この場合、listBox1.SelectedItemプロパティはFileInfoインスタンスを指すようになるので、その後の処理が楽になります。  
なお、変数名は先頭を小文字にしましょう。（listBox1もその命名規則に従っています。）




ディレクトリ名が取れているのであれば、DirectoryInfoのGetFilesを呼べば、FileInfoの配列が取得できるので、そこからNameを取ればファイル名が取得できます。

ディレクトリ名がわかっているのであれば以下の様にできます。

[code]

    var directory = "c:\\";
    var x = new System.IO.DirectoryInfo(directory);
    var p = x.GetFiles("*.txt").Select( fileinfo => fileinfo.Name);
    listBox1.Items.AddRange(p.ToArray());
    
[/code]

フルパスが欲しい場合は、fileinfoのFullNameを取得すればフルパスも取得できます。

なお、selectで抽出せずListBoxに設定しても表示は同じ様にファイル名のみですが、
ListBoxに格納されているオブジェクトはFileInfoになります。

[code]

    var directory = "c:\\";
    var x = new System.IO.DirectoryInfo(directory);
    listBox1.Items.AddRange(x.GetFiles("*.txt"));
    
    // 注意：ファイルが見つかっていない場合はエラーになります。
    var obj = (System.IO.FileInfo)listBox1.Items[0];
    MessageBox.Show(obj.FullName);
    
[/code]

後で選択されたアイテムのファイル情報を再利用したい場合など、状況によってはそのままListBoxに設定してしまう方が便利な場合もありますので、うまく使い分けてください。

