2009-04-23 18 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; 

    } 

私の目的は私が2ファイルを持っているピクチャボックスを同じフォルダ内にfile.fullname「.MP3" を読みますが」.JPG」で終わり、Infactは作ることだった、このコードスニペットを持っています最初の曲は "firstsong.mp3"の曲で、2番目の曲は "firstsong.jpg"の違いは最終的な拡張子なので、同じファイル名でも拡張子は "。* jpg" 「パラメータが無効です」というエラーが表示されます。ラインコードで "pictureBox1.Image = new System.Drawing.Bitmap(filena.ToString());"をクリックします。 どのように私はそれを解決することができますか?あなたの注意を おかげ

ニースよろしく

答えて

3

スイッチ:

filena = filena.Replace(".mp3", ".jpg"); 
if (filena.Length > 0) 
{ 
    pictureBox1.Image = new System.Drawing.Bitmap(filena); 
} 

は、主な問題は、その行に2つの問題がありfilena.Replace("*.mp3", "*.jpg");

です。

まず、 ".mp3"ではなく "* .mp3"で検索します。個々のファイル名は*文字を持たず、string.Replaceは正規表現を使用せず、ストリングマッチングのみを使用します。

第2に、.NETの文字列は不変です。一度作成されると変更することはできません。つまり、文字列の値を置き換えることはできません。常に新しい文字列を返します。したがって、string.Replace(...)は新しい文字列を返します。

+0

-1。私は使用文字列を推薦すると思います。パスは恐ろしい練習です。名前に ".mp3"のインスタンス(ディレクトリパスやファイル名など)がある場合は、そのすべてのインスタンスが置き換えられます(拡張子だけでなく)。また、Replaceは大文字と小文字を区別しますので、結果が間違っている可能性があります。 –

+0

私は実際に同意します - パス上のChangeExtensionメソッドの使用は、文字列置換より優れた方法です。 私はなぜ彼がうまくいかなかったのかを説明することに集中しました。 –

+0

私は-1を取り消しましたが、この情報はおそらくコメント自体ではなく答えにあるべきです。 –

4

コードには他にもいくつか問題があります。最初に、すべてのmp3ファイル名を保存していますが、ロードされた最後の画像のみが表示されます。

限り延長を交換するとして、それを行うためにPathのメソッドを使用します。

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); 
} 
関連する問題