2011-10-18 29 views
2

私はfolderBrowserDialogツールを使用してフォルダの場所を取得していますが、ここで各ファイルを調べてファイル名内の特定の文字を置き換えようとしています。フォルダ内のforeachファイルの名前を変更して保存します

私はそれがコードFile.Move(_FileName, _NewFileName);

のこの部分には、誰もがこの上の任意の光を当てることができます取得するときに、ファイルを見つけることができないというエラーを取得していますか?大変感謝しています。あなたはFiles.FullNameないFiles.Name

FullNameを使用する必要が

おかげ

foreach (FileInfo Files in Folder.GetFiles()) 
      { 
       _FileName = Files.Name; 

       _NewFileName = _FileName.Replace(" ", "-").Replace(",", "-"); 

       File.Move(_FileName, _NewFileName); 

       File.Delete(_FileName); 

      } 

答えて

12

Nameは、単にファイル名自体(すなわちありながらFile.Move()File.Delete()によって必要とされる完全なパスを(つまり、C:\test\foo.txt)が含まfoo.txt )。

編集:

@crashmstrは、文字列の完全なパスに置き換えを行うべきではありませんが正しいです。

foreach (FileInfo file in Folder.GetFiles()) 
{ 
    string originalFileName = file.FullName; 
    string fileName = file.Name.Replace(" ", "-").Replace(",", "-"); 
    string newFileName = Path.Combine(file.DirectoryName, fileName); 

    File.Move(originalFileName, newFileName); 
} 

はまた、あなたがそれを移動した後、元のファイルはもう存在しないので、ここでは必要とされていない心 File.Delete()してください:すべてのすべてで、私は、このようにそれを行うだろうと思います。

+1

フォルダ名にスペースが含まれている場合(置換用) – crashmstr

+0

こんにちは、あなたの素早い対応のために、私はまだ「パスの一部を見つけることができませんでした」というエラーが表示されます。これは何を意味するのでしょうか? –

+0

最後のコメントをスクラップします。これはうまくいきます、ありがとう! –

0

反復処理中のコレクションからアイテムを削除しようとしています。

Folder.GetFiles()から取得したファイルのリストを変数に格納し、foreachを使用してそのファイルを反復処理できます。

+3

彼はコレクションではなくファイルシステムを変更しています - 違いがあります – BrokenGlass

+1

DirectoryInfo.GetFilesは配列を返し、配列は拡大または縮小できません。特に、GetFilesは、GetFilesを呼び出した瞬間のファイルリストを含む新しい配列を返します。したがって、配列は時間とともに変化しません。 –

+0

ご清聴ありがとうございます。 – Birey

関連する問題