我在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);
提前致谢!!
答案 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扩展名,则将最后一个单词拆分为