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 回答
3

试试下面的 ite 会帮助你....

说明:无扩展名的文件名

        listBox1.Items.Add(Path.GetFileNameWithoutExtension(list1[n]));
于 2013-04-08T12:56:43.733 回答
2

Substring方法返回字符串的新副本,从源副本复制。如果您想“切断扩展”,那么您必须获取 Substring 返回的内容并将其存储在某处,即:

int i = list1[n].LastIndexOf(".");
if (i > 0)
    list1[n] = list1[n].Substring(0, i);

但是,这是删除扩展名的非常奇怪的方法。

首先,使用Substring(0,idx)很奇怪,因为有一个Remove(idx)(链接)可以做到这一点:

int i = list1[n].LastIndexOf(".");
if (i > 0)
    list1[n] = list1[n].Remove(i);

但是,其次,还有更好的方法:System.IO.Path该类为您提供了一组编写良好的静态方法,例如,删除扩展名(编辑:这是 L-Three 在评论中建议的),完全处理点等:

var str = System.IO.Path.GetFileNameWithoutExtension("myfile.txt"); // == "myfile"

请参阅MSDN 链接

它仍然返回一个副本,您仍然必须将结果存储在某个地方!

list1[n] = Path.GetFileNameWithoutExtension( list1[n] );
于 2013-04-08T12:49:49.863 回答
2

采用Path.GetFileNameWithoutExtension

于 2013-04-08T12:55:35.450 回答
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,Enumerate files 似乎是比 GetFiles 更好的选择。但是,听起来您也想同时获得完整的文件路径和不带扩展名的文件名。以下是创建字典的方法,以便消除两次循环遍历集合:

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

如果您没有文件路径,只有文件名,可以这样做

string filePath = (@"D:/" + fileName);
string withoutExtension = Path.getFileNameWithoutExtension(filePath);
于 2019-09-30T00:38:24.957 回答