2011-10-18 115 views
2

我有一個簡單的foreach在這裏我已經得到了使用folderBrowserDialog工具的文件夾位置,現在正試圖通過每個文件並替換文件名中的某些字符。在文件夾中的foreach文件,重命名並保存

我得到它說,它無法找到該文件時,它得到的代碼File.Move(_FileName, _NewFileName);

任何人都可以擺脫任何這光這部分的錯誤?將不勝感激。

感謝

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

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

       File.Move(_FileName, _NewFileName); 

       File.Delete(_FileName); 

      } 

回答

12

您需要使用Files.FullName沒有Files.Name

FullName包括由File.Move()File.Delete()所需的完整路徑(即C:\test\foo.txt),而Name僅僅是文件名本身(即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