2008-12-18 35 views

Trả lời

6

Bất kể có hay không Directory.Move (hoặc bất kỳ chức năng nào khác) thực hiện di chuyển giữa các ổ đĩa, về cơ bản nó sẽ làm một bản sao và xóa anyway bên dưới. Vì vậy, nếu bạn muốn tăng tốc độ, điều đó sẽ không xảy ra. Tôi nghĩ giải pháp tốt nhất là viết chức năng di chuyển có thể sử dụng lại của bạn, sẽ nhận được nhãn âm lượng (C:, D :) từ đường dẫn đến và từ, sau đó thực hiện di chuyển hoặc sao chép + xóa khi cần.

4

Theo hiểu biết của tôi không có cách nào khác tuy nhiên xóa một thư mục có một nhược điểm: Chỉ đọc tập tin có thể gây ra một greeve UnauthorizedAccessException khi xóa một thư mục và tất cả các nội dung của nó

public void removeReadOnlyDeep(string directory) 
    { 
     string[] files = Directory.GetFiles(directory); 
     foreach (string file in files) 
     { 
      FileAttributes attributes = File.GetAttributes(file); 
      if ((attributes & FileAttributes.ReadOnly) != 0) 
      { 
       File.SetAttributes(file, ~FileAttributes.ReadOnly); 
      } 
     } 
     string[] dirs = Directory.GetDirectories(directory); 
     foreach (string dir in dirs) 
     { 
      removeReadOnlyDeep(dir); 
     } 
    } 

này recurses một thư mục và unsets tất cả các cờ chỉ đọc. Gọi trước Directory.Delete :)

1

Một lựa chọn dễ dàng hơn sẽ được, để thêm một tham chiếu đến namespace Microsoft.VisualBasic và sử dụng phương pháp MoveDirectory, có thể di chuyển trên khối lượng.

Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(sourceDirName, destDirName); 
0

Cố gắng sử dụng này:

public static void RobustMove(string sourceDirectory, string destDirectory) 
{ 
    //move if directories are on the same volume 
    if (Path.GetPathRoot(source) == Path.GetPathRoot(destination)) 
    { 
     Directory.Move(source, destination); 
    } 
    else 
    {   
     CopyDirectoryRecursive(source, destination); 
     Directory.Delete(source, true); 
    } 
} 

Bạn sẽ tìm thấy chức năng CopyDirectoryRecursive here:

này nên được làm việc cho đến khi bạn sử dụng spanned volume hoặc biểu tượng liên kết đến một đĩa vật lý.

Để mạnh mẽ hơn nữa, bạn có thể cải thiện chức năng này để sử dụng Di chuyển cho đến khi System.IO. Ngoại lệ được ném và sau đó chuyển sang sao chép và xóa.

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