2012-11-29 14 views
9

あるディレクトリから別のディレクトリにいくつかのイメージ(ファイル名は(1).PNG、(2).PNGなど)を移動しています。タイプSystem.IO.FileNotFoundExceptionの最初のチャンス例外がまたCでファイルを移動する

System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'. 

がmscorlib.dllで発生した

、私は:私は、次のエラーを取得しています、しかし

for (int i = 1; i < n; i++) 
{ 
    try 
    { 
     from = "E:\\vid\\(" + i + ").PNG"; 
     to = "E:\\ConvertedFiles\\" + i + ".png"; 

     File.Move(from, to); // Try to move 
     Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
     Console.WriteLine(ex); // Write error 
    } 
} 

:私は、次のコードを使用しています変換されたファイル名が00001.png、00002.png ... 00101となるようにファイルの名前を変更する計画です。

+4

愚かな質問ですが、 "E:\ vid(1).PNG"が存在することを確認していますか? – Rotem

+1

'ファイル 'E:\ vid(1).PNG'を見つけることができませんでしたが、あなたのコードに' E:\\ vid \\(1).png'と書かれています。 –

+0

何か問題があります:あなたのコードでは '(_num _)。png'という名前のファイルがあり、' E:\ vid'ディレクトリにあります。エラーメッセージには、あなたが 'vid(_num _).png'ファイルを' E:\\ 'ディレクトリに"見つけようとしていた "と書かれています。そのため、エラーメッセージとコードが一致しません。一致した実際のコードとエラーメッセージを投稿してください。 –

答えて

11

を追加し、私として整数と連結が原因その
に動作し、代わりに\\を使用するのではありません

from = "E:\\vid\\(" + i + ").PNG"; 
to = "E:\\ConvertedFiles\\" + i + ".png"; 

を渡していますより読みやすい方法でスラッシュをエスケープします。パスを連結するにはPath.Combine(...)も使用し、ファイル名を具体的に指定するにはPadLeftを使用してください。

for (int i = 1; i < n; i++) 
{ 
    try 
    { 
     from = System.IO.Path.Combine(@"E:\vid\","(" + i.ToString() + ").PNG"); 
     to = System.IO.Path.Combine(@"E:\ConvertedFiles\",i.ToString().PadLeft(6,'0') + ".png"); 

     File.Move(from, to); // Try to move 
     Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
     Console.WriteLine(ex); // Write error 
    } 
} 
1

例外は、ファイルE:\vid(1).PNGが存在しないことを意味します。 E:\vid1.PNGを意味しますか?

パスを構築するためにSystem.IO.Pathクラスを使用してください。文字列を連結するよりも優れています。バックスラッシュのエスケープについて心配する必要はありません。

1
i.ToString() 

が役に立ちます。あなたは私はあなたがするために'@'を使用することをお勧め@

このような
from = @"E:\vid\(" + i + ").PNG"; 
+2

'ToString()'は、文字列でcontcatenatingするときに暗黙的に呼び出されます。これが問題だった場合、彼のコードはコンパイルされませんでした。 – Rotem

+0

アーメン。真実 –

3

なぜこのようなものを使用しないのですか?

var folder = new DirectoryInfo(@"E:\vid\")); 

if (folder.Exists) 
{ 
    var files = folder.GetFiles(".png"); 
    files.toList().ForEach(f=>File.Move(from,to)); 
} 
1

私はVisual Studioでこれを実行しました。出来た。

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


namespace ConsoleApplication2 

{ 

    class Program 
    { 
     static void Main() 
     { 
      int n = 3; 
      for (int i = 1; i < n; i++) 
      { 
       string from = "C:\\vid\\(" + i + ").PNG"; 
       string to = "C:\\ConvertedFiles\\" + i + ".png"; 
       { 
        try 
        { 
         File.Move(from, to); // Try to move 
         Console.WriteLine("Moved"); // Success 
        } 
        catch (System.IO.FileNotFoundException e) 
        { 
         Console.WriteLine(e); // Write error 
        } 
       } 
      } 
     } 
    } 

} 

テストを開始するためにファイルをvidディレクトリに移動していたときに、かっこでウィンドウが削られている可能性があります。 (1).pngが1.pngになった...その現象からファイルが見つかりません...そうでなければ、あなたのコードは安定しています。私のバージョンはほぼ同じです。

0
var folder = new DirectoryInfo(sourcefolder); 

if (folder.Exists) 
{ 
    var files = folder.GetFiles("*.png"); 
    files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f)); 
} 

私はこれが役に立ちそうです。

関連する問題