2015-05-31 13 views

Trả lời

6

Tôi không biết những gì "di chuyển" có nghĩa là, ngoài việc đổi tên một mục. Ngay cả trong các hệ thống tập tin đĩa thường xuyên, một "di chuyển" thực sự chỉ là một đổi tên, nơi đường dẫn đầy đủ của tên tập tin đã thay đổi, không chỉ là "nút lá" tập tin tên. Trong một kho lưu trữ .zip, điều này thậm chí còn rõ ràng hơn; một "thư mục" hoặc "thư mục" trong một kho lưu trữ chỉ tồn tại bởi một mục có tên thư mục đó trong tên của nó (tách biệt, tất nhiên, bởi một ký tự phân cách thư mục). Vì vậy, "di chuyển" là chính xác giống như "đổi tên".


Theo như liệu bạn có thể đổi tên sự vật, không & hellip; với ZipArchive, bạn sẽ phải tạo một mục mới đó là một bản sao của bản gốc, nhưng với những cái tên mới, và sau đó xóa bản gốc.

Mã để làm điều đó sẽ trông như thế này:

static void RenameEntry(this ZipArchive archive, string oldName, string newName) 
{ 
    ZipArchiveEntry oldEntry = archive.GetEntry(oldName), 
     newEntry = archive.CreateEntry(newName); 

    using (Stream oldStream = oldEntry.Open()) 
    using (Stream newStream = newEntry.Open()) 
    { 
     oldStream.CopyTo(newStream); 
    } 

    oldEntry.Delete(); 
} 

thực hiện như một phương pháp mở rộng, như ở trên, bạn có thể gọi như thế này:

ZipArchive archive = ...; open archive in "update" mode 
string oldName = ..., 
    newName = ...; // names initialized as appropriate 

archive.RenameEntry(oldName, newName); 
+0

Cảm ơn, Peter. IO đã mong đợi điều này. Tôi chỉ hy vọng có thể có một số cách thanh lịch hơn với việc phải sao chép dữ liệu. Nhưng nếu không giải pháp này là tốt cho tôi. – msedi

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