我有这段代码
private List<string> FolderOne(string Folder)
{
string filena;
DirectoryInfo dir = new DirectoryInfo(Folder);
FileInfo[] files = dir.GetFiles("*.mp3", SearchOption.AllDirectories);
List<string> str = new List<string>();
foreach (FileInfo file in files)
{
str.Add(file.FullName);
filena = file.FullName;
filena.Replace("*.mp3", "*.jpg");
if (filena.Length > 0)
{
pictureBox1.Image = new System.Drawing.Bitmap(filena.ToString()); //I receive a error "Parameter is not valid."
}
}
return str;
}
我的目的是在同一文件夹中读取文件框中的file.fullname“.mp3”,但以“.jpg”结尾,实际上我在文件夹中有2个文件,第一个是歌曲“firstsong.mp3” “和第二个图片”firstsong.jpg“它们之间的区别是最后的扩展,所以我尝试使用相同的文件名读取到图片框,但扩展名为”。* jpg“,我收到错误”参数无效。 “在行代码“pictureBox1.Image = new System.Drawing.Bitmap(filena.ToString());”。 我怎么能解决这个问题? 谢谢你的关注
不错的问候
答案 0 :(得分:4)
您的代码还存在其他一些问题。首先,您要存储所有mp3文件名,但仅显示最后加载的图像。
至于替换扩展名,请使用Path
的方法来执行此操作:
string musicFile = "mysong.mp3";
string imageFile = Path.ChangeExtension(musicFile, "jpg");
答案 1 :(得分:3)
切换到:
filena = filena.Replace(".mp3", ".jpg");
if (filena.Length > 0)
{
pictureBox1.Image = new System.Drawing.Bitmap(filena);
}
主要问题在于filena.Replace("*.mp3", "*.jpg");
该行有两个问题。
首先,您正在搜索“* .mp3”而不是“.mp3”。单个文件名没有*字符,string.Replace不使用正则表达式,只是字符串匹配。
其次,.NET中的字符串是不可变的。它们一旦创建就无法更改。这意味着您无法替换字符串的值 - 您始终返回一个新字符串。所以string.Replace(...)将返回一个新字符串。
答案 2 :(得分:1)
我添加了之前的建议,补充说你应该通过执行以下操作检查jpg是否存在:
if (File.Exists(jpgFilePath)) {
pictureBox1.Image = new System.Drawing.Bitmap(jpgFilePath);
}