2009-04-23 2 views
1

у меня есть этот фрагмент кодаКак заменить 2 файла?

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», Infact у меня есть 2 файла в папка первая - это песня «firstsong.mp3», а вторая - «firstsong.jpg». Разница между ними - это окончательное расширение, поэтому я пытаюсь сделать так, чтобы на картинке отображалось то же имя файла, но с расширением ». * jpg" и я получаю сообщение об ошибке «Параметр недействителен». в строке кода "pictureBox1.Image = new System.Drawing.Bitmap (filena.ToString());". Как я могу это решить? Спасибо за внимание

Nice уважением

ответ

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 (...) вернет новую строку.

+0

-1. Я думаю, рекомендую использовать строку use.Replace для пути - это ужасная практика. Если у названия есть другие экземпляры «.mp3» (например, любой путь к каталогу или имя файла), * все * эти экземпляры будут заменены, а не только расширение, которое он пытается сделать. Кроме того, Replace чувствителен к регистру, что может привести к неправильным результатам. –

+0

Я на самом деле согласен - использование метода ChangeExtension на пути является лучшей практикой, чем замена строки. Я больше сфокусировался на объяснении, почему его не сработало, меньше на то, чтобы дать ему другой, но, вероятно, лучший подход. –

+0

Я расстегнул -1, но эта информация, вероятно, должна быть в самом ответе, а не в комментариях. –

4

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

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

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

Кроме того, нет необходимости вызывать ToString() в строке. Это немного избыточно. –

1

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

if (File.Exists(jpgFilePath)) { 
    pictureBox1.Image = new System.Drawing.Bitmap(jpgFilePath); 
} 
Смежные вопросы