4

私のプログラムが行うことは、基本的に、ディレクトリからリストボックスにファイル名(拡張子を含む)をリストすることです。次に、リスト文字列をアルファベット順にソートするソート機能があります。

最後に、プログラムが比較して一致した結果をリストボックスに表示する任意の文字列をユーザーが入力できるバイナリ検索機能があります。

現在、これらの機能はすべて完全に機能していますが、検索後にファイル名から拡張子を削除できないようです。

たとえば、スキャンと並べ替えの部分では、ファイル名を次のようにリストします: filename.mp3

ここで、検索ボタンをクリックしたときに実行したいことは、ファイル拡張子を削除してファイル名だけを表示することです。

    private void buttonSearch_Click(object sender, RoutedEventArgs e)
    {

        listBox1.Items.Clear();

        string searchString = textBoxSearchPath.Text;


        int index = BinarySearch(list1, 0, list1.Count, searchString);

        for (int n = index; n < list1.Count; n++)
        {
            //Removes file extension from last decimal point ''not working''
            int i = list1[n].LastIndexOf(".");
            if (i > 0)
                list1[n].Substring(0, i);

            // Adds items to list
            if (list1[n].IndexOf(searchString, StringComparison.OrdinalIgnoreCase) != 0) break; 
            listBox1.Items.Add(list1[n]);
        }
        MessageBox.Show("Done");
    }
4

7 に答える 7

6

C# は非常に簡単なので、何かに 2 分以上かかる場合は、おそらくフレームワークにそのためのメソッドがあります。

于 2013-04-08T12:51:14.847 に答える
2

Path.GetFileNameWithoutExtension メソッドを使用します。とても簡単だと思います。

http://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension.aspx

于 2013-04-08T13:12:10.657 に答える
2

ディレクトリ検索をどのように実装したかはわかりませんが、クリーンで読みやすいコードのために、次のような状況で LINQ を活用できます。

var files = Directory.EnumerateFiles(@"\\PathToFiles")
            .Select(f => Path.GetFileNameWithoutExtension(f));

.NET 4.0 を使用している場合、ファイルの列挙は GetFiles より優れた選択肢のようです。ただし、完全なファイルパスと拡張子なしのファイル名の両方を取得したいようにも思えます。コレクションを 2 回ループする必要がないように Dictionary を作成する方法は次のとおりです。

var files = Directory.EnumerateFiles(@"\\PathToFiles")
            .ToDictionary(f => f, n => Path.GetFileNameWithoutExtension(n));
于 2013-11-05T19:04:44.360 に答える