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

时间:2013-04-08 12:48:00

标签: c#

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

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

现在,所有这些功能都可以正常运行,但是我无法在搜索后删除文件名的扩展名。

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

7 个答案:

答案 0 :(得分:5)

C#非常简单,如果内容超过2分钟,框架中there probably is a method for it

答案 1 :(得分:3)

尝试下面的迭代会帮助你......

说明:Filename without Extension

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

答案 2 :(得分:2)

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

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

然而,这是删除扩展名的奇怪方法。

首先,使用Substring(0,idx)是奇怪的,因为有一个Remove(idx)(link)就是这样:

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] );

答案 3 :(得分:2)

答案 4 :(得分:2)

使用Path.GetFileNameWithoutExtension方法。我觉得很容易。

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

答案 5 :(得分:1)

不确定您是如何实现目录搜索的,但是在这些情况下您可以利用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));

答案 6 :(得分:0)

如果没有文件路径,只有文件名,则可以执行此操作

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