如何找到 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;
列表中剩余的歌曲依此类推。
我正在制作音乐播放器。它有两种形式;第一个是典型的 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;
列表中剩余的歌曲依此类推。