如何找到 WMP url 的组合文件名和文件路径?

How to find combine file name with file path for WMP url?

我正在制作音乐播放器。它有两种形式;第一个是典型的 play/stop/pause 界面。第二种形式有一个选中的列表框来选择你的歌曲。一旦我单击第二个表单中的一个按钮,它就会填充一个文本文件,每一行都列出了我想要播放的每个 mp3 的名称。 所有的 mp3 都在同一个文件夹中。 如何将每一行分别与文件路径结合起来?

例如:

歌名:疯狂

文件路径:C:\Users\Me\Desktop\JAM_MACHINE\JAMS

结果:C:\Users\Me\Desktop\JAM_MACHINE\JAMS\Crazy.mp3

这是我所做的:

string contents = File.ReadAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt");
        var fullPath = Path.GetFullPath(contents + ".mp3");

        wplayer.URL = fullPath;

当我按下应该开始播放歌曲的按钮时没有任何反应。

我尝试用固定路径替换第三行的fullPath,即只是

wplayer.URL = @"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\Crazy.mp3");

然后按下按钮播放,就可以了。所以问题不在于播放按钮的编码。

此外,当我按下按钮时,应该会有一个按钮按下声音,当我尝试第二个代码时它会起作用。但是当我尝试第一个代码时没有声音。

请帮我理解。以下是供您参考的完整代码:

`public PLAYER()
    {
        InitializeComponent();
    }

    WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
    WMPLib.WindowsMediaPlayer playSFX = new WMPLib.WindowsMediaPlayer();
    WMPLib.WindowsMediaPlayer pauseSFX = new WMPLib.WindowsMediaPlayer(); //initialise all the sounds
    DataRecord songRecord = new DataRecord();


    private void PLAYER_Load(object sender, EventArgs e)//the event is actually PLAYER_Activated
    {

        string contents = File.ReadAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt");
        var fullPath = Path.GetFullPath(contents + ".mp3");

        wplayer.URL = fullPath;
        playSFX.URL = @"C:\Users\Me\Desktop\JAM_MACHINE\PLAY.wav";
        pauseSFX.URL = @"C:\Users\Me\Desktop\JAM_MACHINE\PAUSE.wav";
        wplayer.controls.stop();
        playSFX.controls.stop();
        pauseSFX.controls.stop();

    }

    private void playbtn_Click(object sender, EventArgs e)
    {
        playSFX.controls.play();
        wplayer.controls.play();
    }

    private void pausebtn_Click(object sender, EventArgs e)
    {
        pauseSFX.controls.play();
        wplayer.controls.pause();
    }

    private void stopbtn_Click(object sender, EventArgs e)
    {
        pauseSFX.controls.play();
        wplayer.controls.stop();
        this.Visible = false;
        JAMS JAMS = new JAMS();
        JAMS.ShowDialog();

        if(JAMS.Visible == false)//if jams isnt open, open it
        {
            this.Visible = true;
        }
    }`

如果您的 records.txt 文件看起来像这样:

myFirstSong
mySecondSong
myThirdSong
Crazy

您可以通过执行以下操作获取所有文件路径:

private IEnumerable<string> GetFileList(string pathToRecords)
{
    var directory = new FileInfo(pathToRecords).DirectoryName;
    var songNames = File.ReadAllLines(pathToRecords);
    var filePaths = songNames.Select(songName => Path.Combine(directory, songName + ".mp3"));

    return filePaths;
}

如果 pathToRecords 是 "c:\x\records.txt" 那 returns 你的列表看起来像这样。

c:\x\myFirstSong.mp3
c:\x\mySecondSong.mp3
c:\x\myThirdSong.mp3
c:\x\Crazy.mp3

然后您可以将播放器url设置为列表中的路径之一:

var songPaths = GetFileList(@"c:\x\records.txt").ToList();
var firstSong = songPaths[0];
wplayer.URL = firstSong;

列表中剩余的歌曲依此类推。