在这篇博客中,我将展示如何使用C#和Windows Forms构建一个简单的在线音乐下载程序。这个程序允许用户输入音乐URL并下载该音乐文件,同时提供下载成功或失败的反馈。
环境搭建
首先,我们需要一个Windows开发环境,我将使用Visual Studio。确保你已经安装了Visual Studio并创建了一个新的Windows Forms应用程序项目。
设计表单
- 打开你的Windows Forms应用程序项目。
- 在表单设计器中,添加以下控件:
- 一个按钮 (
buttonDownload
),用于触发下载操作。 - 一个文本框 (
textBoxURL
),用于输入音乐URL。 - 一个ListBox (
listBox1
),用于显示下载结果
- 一个按钮 (
在线播放功能实现
设置 Windows Media Player 控件的 URL 为指定的 onlineMusicURL
,开始播放音乐。同时,解析音乐 URL 中的查询参数,特别是 fn
参数,以获取音乐文件的文件名。使用 WebUtility.UrlDecode()
解码文件名,确保其显示正确,并确保文件名以 .mp3
扩展名结尾。最后,在 listBox1
中添加一条消息,显示当前正在播放的歌曲信息。
private void button4_Click(object sender, EventArgs e)
{
PlayOnlineMusic();
}
private void PlayOnlineMusic()
{
// 设置 Windows Media Player 控件的 URL 为 onlineMusicUrl,并开始播放
axWindowsMediaPlayer1.URL = onlineMusicUrl;
axWindowsMediaPlayer1.Ctlcontrols.play();
// 获取在线音乐的标题
Uri musicUri = new Uri(onlineMusicUrl);
string songName = "";
var query = musicUri.Query;
if (query.StartsWith("?"))
{
query = query.Substring(1); // 去除开头的问号
}
var queryParameters = QueryHelpers.ParseQuery(query);
// 解析 URL 中的文件名参数 "fn"
if (queryParameters.TryGetValue("fn", out var encodedSongName))
{
songName = WebUtility.UrlDecode(encodedSongName.First()); // 解码 URL 编码的文件名
}
else
{
// 处理未找到 "fn" 参数的情况
MessageBox.Show("URL 中未找到文件名参数。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// 确保文件名不包含无效的文件系统字符,并保留 .mp3 扩展名
songName = Path.GetFileName(songName);
if (!Path.GetExtension(songName).Equals(".mp3", StringComparison.OrdinalIgnoreCase))
{
// 如果文件名没有 .mp3 扩展名,则添加它
songName += ".mp3";
}
// 在 listBox1 中显示正在播放的歌曲信息
listBox1.Items.Add("正在播放的歌曲 " + songName);
}
下载功能实现
- 音乐文件名和路径构建:
- 使用
Path.GetFileName(new Uri(onlineMusicUrl).AbsolutePath)
获取音乐文件名。 - 使用
Path.Combine(downloadPath, fileName)
构建完整的本地文件路径。
- 使用
- WebClient 下载:
- 创建
WebClient
实例webClient
来执行文件下载操作。 - 在
try
块中,确保目标文件夹存在,如果不存在则创建该文件夹。 - 使用
webClient.DownloadFile(onlineMusicUrl, completeFilePath)
下载音乐文件到本地路径。
- 创建
- 异常处理:
- 使用
catch (Exception ex)
捕获所有可能的异常,包括网络错误、文件访问错误等。 - 在异常发生时,通过
MessageBox.Show("下载失败:" + ex.Message)
显示具体的错误信息。
- 使用
private void button1_Click(object sender, EventArgs e)
{
DownloadOnlineMusic();
}
private void DownloadOnlineMusic()
{
// 获取音乐文件名
string fileName = Path.GetFileName(new Uri(onlineMusicUrl).AbsolutePath);
// 构建完整的本地文件路径
string completeFilePath = Path.Combine(downloadPath, fileName);
// 创建 WebClient 实例用于下载
WebClient webClient = new WebClient();
try
{
// 确保目标文件夹存在,如果不存在则创建
string directory = Path.GetDirectoryName(completeFilePath);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
// 下载音乐文件到本地
webClient.DownloadFile(onlineMusicUrl, completeFilePath);
// 下载成功,显示消息框提示
MessageBox.Show("音乐下载完成。");
}
catch (Exception ex)
{
// 下载过程中出现异常,显示错误消息
MessageBox.Show("下载失败:" + ex.Message);
}
finally
{
// 确保释放 WebClient 资源
webClient.Dispose();
}
}
具体代码:https://github.com/14Z77745209/window-/blob/main/zy3
总结
这个简单的在线音乐播放器程序允许你快速播放网络上的音乐文件,并提供了简单的错误处理功能,确保用户能够轻松地使用。你可以根据自己的需求进一步扩展和优化这个程序,例如添加音量控制、进度条显示和更复杂的音乐播放功能等。希望这篇概要能够帮助你快速了解如何使用C#构建一个在线音乐播放器