Как заменить 2 файла? - PullRequest
       17

Как заменить 2 файла?

1 голос
/ 23 апреля 2009

у меня есть этот фрагмент кода

    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;

    }

Моя цель состояла в том, чтобы заставить файл рисунка прочитать имя файла.fullname ".mp3" в той же папке, но оканчиваться на ".jpg", фактически у меня есть 2 файла в папке, первым является песня "firstsong.mp3 "а вторая - картинка" firstsong.jpg ", разница между ними - это окончательное расширение, поэтому я пытаюсь сделать для чтения в picturebox то же имя файла, но с расширением". * jpg ", и я получаю сообщение об ошибке" Параметр недопустим. " в строке кода "pictureBox1.Image = новый System.Drawing.Bitmap (filena.ToString ());". Как я могу решить это? Спасибо за ваше внимание

С наилучшими пожеланиями

Ответы [ 3 ]

4 голосов
/ 23 апреля 2009

Есть и другие проблемы с вашим кодом. Прежде всего, вы сохраняете все имена файлов mp3, но отображаете только последнее загруженное изображение.

Что касается замены расширения, используйте для этого метод Path:

string musicFile = "mysong.mp3";
string imageFile = Path.ChangeExtension(musicFile, "jpg");
3 голосов
/ 23 апреля 2009

Переключиться на:

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 голос
/ 23 апреля 2009

Я бы добавил к предыдущим предложениям, добавив, что вы должны проверить существование jpg, выполнив следующее:

if (File.Exists(jpgFilePath)) {
     pictureBox1.Image = new System.Drawing.Bitmap(jpgFilePath);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...