2012-11-29 90 views
9

我將一些圖像(文件名爲(1).PNG,(2).PNG等)從一個目錄移動到另一個目錄。我使用下面的代碼:在C#中移動文件

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 
    } 
} 

不過,我收到以下錯誤:

System.IO.FileNotFoundException類型的第一次機會異常出現在mscorlib.dll

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

另外,我計劃重命名這些文件,以便轉換後的文件名將爲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'目錄中。錯誤消息指出你正試圖在E:\\目錄下「找到」vid(_num _)。png'文件。所以錯誤信息和代碼不匹配。請確保您發佈了匹配的實際代碼和錯誤消息。 –

回答

11

我建議你使用'@'以以更可讀的方式逃脫斜線。使用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"; 
to = "E:\\ConvertedFiles\\" + i + ".png"; 

我作爲整數和連接不工作,由於該
和,而不是使用\\,加@這樣

from = @"E:\vid\(" + i + ").PNG"; 
+2

當與字符串聯合時,'ToString()'被隱式調用。如果這是問題,他的代碼甚至不會編譯。 – 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目錄中開始測試時,windows會從括號中刪除。 (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)); 
} 

我相信這將有助於。