2012-11-29 28 views
9

Tôi đang di chuyển một số hình ảnh (tên tệp là (1) .PNG, (2) .PNG và vv ..) từ một thư mục này sang thư mục khác. Tôi đang sử dụng đoạn mã sau:Di chuyển các tập tin trong 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 
    } 
} 

Tuy nhiên, tôi nhận được lỗi sau:

Một ngoại lệ cơ hội đầu tiên của loại System.IO.FileNotFoundException xảy ra ở mscorlib.dll

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

Ngoài ra, tôi lập kế hoạch đổi tên các tệp sao cho tên tệp được chuyển đổi sẽ là 00001.png, 00002.png ... 00101 và cứ như vậy.

+4

Câu hỏi ngớ ngẩn, nhưng bạn chắc chắn rằng "E: \ vid (1) .PNG" tồn tại? – Rotem

+1

'Không thể tìm thấy tệp 'E: \ vid (1) .PNG'' nhưng mã của bạn cho biết' E: \\ vid \\ (1) .png' - vì vậy có dấu gạch chéo bị thiếu ở đâu đó, phải không? –

+0

Đã xảy ra sự cố: mã của bạn mong các tệp được đặt tên là '(_num _). Png' và nằm trong thư mục' E: \ vid'. Các thông báo lỗi nói rằng bạn đang cố gắng "tìm" tập tin 'vid (_num _). Png' trong thư mục' E: \\ '. Vì vậy, thông báo lỗi và mã không khớp. Vui lòng đảm bảo rằng bạn đã đăng mã thực tế và thông báo lỗi khớp với. –

Trả lời

11

tôi đề nghị bạn sử dụng '@' để thoát khỏi slashes theo một cách dễ đọc hơn. Sử dụng cũng Path.Combine(...) để ghép các đường dẫn và PadLeft để có tên tệp của bạn làm chi tiết cụ thể của bạn.

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

Trường hợp ngoại lệ có nghĩa là tệp E:\vid(1).PNG không tồn tại. Bạn có nghĩa là E:\vid1.PNG?

Sử dụng lớp System.IO.Path để tạo đường dẫn, tốt hơn là ghép các chuỗi. Bạn không phải lo lắng về việc thoát khỏi các dấu gạch chéo ngược.

1
i.ToString() 

có thể giúp bạn. Bạn đang đi qua

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

tôi là số nguyên và nối không hoạt động do đó
và thay vì sử dụng \\, thêm @ như thế này

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

'ToString()' được gọi ngầm khi contcatenating với một chuỗi. Nếu đây là vấn đề, mã của anh ta thậm chí sẽ không biên dịch. – Rotem

+0

Amen to that. thật –

3

Tại sao bạn không sử dụng một cái gì đó như thế này?

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

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

Tôi vừa chạy điều này trong Visual Studio. Nó đã làm việc.

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

} 

Có thể khi bạn di chuyển tệp vào thư mục vid để bắt đầu kiểm tra, các cửa sổ được cạo khỏi dấu ngoặc đơn. (1) .png đã trở thành 1.png ... Tôi nhận được một tập tin không tìm thấy lỗi từ hiện tượng đó ... nếu không, mã của bạn là rắn. Phiên bản của tôi gần như giống hệt nhau.

0
var folder = new DirectoryInfo(sourcefolder); 

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

Tôi tin điều này sẽ hữu ích.

Các vấn đề liên quan