【问题标题】:How replace 2 files?如何替换2个文件?
【发布时间】:2009-04-23 18:06:11
【问题描述】:

我有这个代码sn-p

    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;

    }

我的目的是在同一文件夹中读取图片框的文件。全名“.mp3”但以“.jpg”结尾,事实上我在一个文件夹中有 2 个文件第一个是歌曲“firstsong.mp3” ”和第二张图片“firstsong.jpg”它们之间的区别是最终扩展名,所以我尝试读取相同的文件名但扩展名为“.*jpg”的图片框,我收到错误“参数无效。 "在行代码“pictureBox1.Image = new System.Drawing.Bitmap(filena.ToString());”中。 我怎么能解决这个问题? 感谢您的关注

问候

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    您的代码还有其他一些问题。首先,您将存储所有 mp3 文件名,但仅显示最后加载的图像。

    至于替换扩展,使用Path的方法来做到这一点:

    string musicFile = "mysong.mp3";
    string imageFile = Path.ChangeExtension(musicFile, "jpg");
    

    【讨论】:

    • 另外,不需要对字符串调用 ToString()。有点多余。
    【解决方案2】:

    切换到:

    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(...) 会返回一个新的字符串。

    【讨论】:

    • -1。我认为推荐使用 string.Replace 作为路径是可怕的做法。如果该名称有任何其他“.mp3”实例(例如任何目录路径或文件名),所有这些实例将被替换,而不仅仅是他试图做的扩展名。此外,替换是区分大小写的,这可能会导致一些错误的结果。
    • 我实际上同意 - 在 Path 上使用 ChangeExtension 方法比字符串替换更好。我更专注于解释他为什么不起作用,而不是给他一个不同但可能更好的方法。
    • 我解开了-1,但这个信息可能应该在答案本身而不是在 cmets 中。
    【解决方案3】:

    我将通过添加您应该通过执行以下操作来检查 jpg 是否存在来添加之前的建议:

    if (File.Exists(jpgFilePath)) {
         pictureBox1.Image = new System.Drawing.Bitmap(jpgFilePath);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多