从字符串列表中删除文件扩展名

本文关键字:文件 扩展名 删除 字符串 列表 | 更新日期: 2023-09-27 18:08:16

我的程序做的基本上是它列出文件名(包括它的扩展名)从一个目录到一个列表框。然后,它有一个排序函数,将列表字符串按字母顺序排序。

最后,它有一个二进制搜索功能,允许用户输入任何字符串,然后程序将比较并将匹配的结果显示在列表框中。

现在,所有这些功能都工作得很好,但是我似乎无法在搜索后删除文件名的扩展名。

例如,在扫描和排序部分,它列出了文件名: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");
    }

从字符串列表中删除文件扩展名

c#是如此简单,如果某件事需要花费超过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 link

它仍然返回一个副本,你仍然需要将结果存储在某个地方!

list1[n] = Path.GetFileNameWithoutExtension( list1[n] );

试试下面的方法,它会帮助你....

说明:文件名没有扩展名

        listBox1.Items.Add(Path.GetFileNameWithoutExtension(list1[n]));

使用Path.GetFileNameWithoutExtension

使用路径。GetFileNameWithoutExtension方法。我想很容易。

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

不确定您是如何实现目录搜索的,但是您可以在这些情况下利用LINQ来获得干净,易于阅读的代码:

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

如果你正在使用。net 4.0, Enumerate文件似乎是比GetFiles更好的选择。然而,它也听起来像你想要得到完整的文件路径和文件名没有扩展名。下面是创建Dictionary的方法,这样就可以避免对集合进行两次循环:

var files = Directory.EnumerateFiles(@"''PathToFiles")
            .ToDictionary(f => f, n => Path.GetFileNameWithoutExtension(n));

如果没有文件路径,只有文件名

string filePath = (@"D:/" + fileName);
string withoutExtension = Path.getFileNameWithoutExtension(filePath);