从列表框中删除文件扩展名和位置

时间:2016-11-15 14:30:39

标签: c#

我在c#中使用自动加载功能制作一个mp3播放器,它可以很好地加载和播放,但是显示.mp3文件的列表框中的“问题”。它显示文件目录和文件扩展名,如下所示:

C:\Users\Felix\Documents\songs_here\list_1\Admiral P - Engle.mp3

并保证我希望它显示:

Admiral P - Engel

这是可能的,我该怎么办?文件加载代码是:

private void PopulateListBox1(string folder)
    {
        string[] files = Directory.GetFiles(folder);
        foreach (string file in files)
            listBox1.Items.Add(file);
    }



PopulateListBox1(dir1);

提前致谢!!

3 个答案:

答案 0 :(得分:3)

您可以使用Path.GetFileNameWithoutExtension

  

Path.GetFileNameWithoutExtension Method(String)
  返回没有扩展名的指定路径字符串的文件名。

例如:

Path.GetFileNameWithoutExtension("C:\Users\...\songs_here\list_1\Admiral P - Engle.mp3");

会回来:

  

海军上将P - 恩格尔

<强>更新

我从您的评论中假设您要显示文件名,但仍然引用要传递给播放器的文件路径。
您需要创建自己的类来保存mp3文件名和路径,如下所示:

public class MusicFile
{
    public string Path;
    public string FileName;

    public override string ToString()
    {
        return FileName;
    }
}

private void PopulateListBox1(string folder)
{
    string[] files = Directory.GetFiles(folder);

    foreach (string file in files)
    {
        var music = new MusicFile
        {
            Path = file,
            FileName = Path.GetFileNameWithoutExtension(file)
        };

        listBox1.Items.Add(music);
    }
}

这显示了如何遍历每个项目并获取路径,但您也可以根据需要使用SelectedIndexChanged等事件。

foreach (var item in listBox1.Items)
{
    var filepath = ((MusicFile)item).Path; // Shows the full path, pass this to the player
}

答案 1 :(得分:1)

使用Linq一行代码

private void PopulateListBox1(string folder)
{
  listBox1.DataSource =Directory.GetFiles(folder).Select(x => Path.GetFileNameWithoutExtension(x)).ToList();
}

答案 2 :(得分:0)

由于文件命名模式相同,首先您可能需要检查文件扩展名,并在每个文件条目上以点字符分割字符串,然后对于每个文件,如果是mp3扩展名,则将最后一个单词拆分为