如何替换2个文件?

时间:2009-04-23 18:06:11

标签: c# .net winforms

我有这段代码

    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());”。 我怎么能解决这个问题? 谢谢你的关注

不错的问候

3 个答案:

答案 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);
}