2012-05-04 22 views
7

Có ai đó có thể thực hiện nén trong môi trường .NET để tạo ra các vùng giữa các tệp. Tôi muốn sử dụng chức năng này nếu có thể, có lẽ bằng cách sử dụng chức năng trong msdelta.dll. Tôi cũng muốn được quan tâm đến cách tạo ra các vùng đồng bằng sử dụng các thư viện khác (nguồn mở tốt hơn).Nén Delta trong .NET

+0

[xdelta] (http://xdelta.org/) là mã nguồn mở mà tôi thấy được sử dụng nhiều nhất. Tuy nhiên, bạn không chắc chắn về cách gọi C#. – Rup

+0

Cảm ơn. Tôi đã kiểm tra liên kết của bạn và tìm thấy một liên kết khác (http://www.pobox.com/~skeet/csharp/miscutil) có phiên bản bộ giải mã C#. Tuy nhiên, tôi cũng sẽ cần một bộ mã hóa. – dubs

Trả lời

6

Tôi hy vọng điều này không phải là quá nhiều của một plug biết xấu hổ, nhưng tôi đã viết một thư viện bao bọc xung quanh cả PatchAPIMSDelta cho mục đích riêng của mình.

Thư viện được cấp phép kép theo MS-PL và DBAD-PL và có sẵn trên GitHub.

Tôi đang giải trí khái niệm xuất bản dự án trên NuGet, nhưng hiện tại bạn có thể tải xuống nguồn và cả tạo và áp dụng các vùng đồng bằng.

Tạo một vùng đồng bằng nên tự giải thích:

var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */ 
compression.CreateDelta(sourcePath, destinationPath, deltaPath); 

Và không kém phần tự giải thích (hy vọng) đang áp dụng một vùng đồng bằng:

var compression = new MsDeltaCompression(); /* or PatchApiCompression(); */ 
compression.ApplyDelta(deltaPath, sourcePath, destinationPath); 

Thử nghiệm trên x86, nhưng P/Gọi chữ ký nên có giá trị như nhau cho x64 và ia64.

Nếu bạn đã chưa quyết định về việc liệu bạn đang sử dụng PatchAPI hoặc MSDelta, README.md của dự án của tôi cố gắng đề nghị (tóm tắt) cái nào bạn nên sử dụng, nhưng nếu không the documentation for Microsoft's Delta Compression đã này để nói về MSDelta vs PatchAPI:

MSDelta ... có thể tạo ra các file nén nhỏ hơn nhiều so với sản xuất bằng các phương pháp khác. Giao hàng với Windows Vista, đây là thế hệ tiếp theo của công nghệ trước đây được phát hành dưới dạng PatchAPI (sẽ tiếp tục được hỗ trợ).

Mỏ nhấn mạnh.

+0

[Gói NuGet] (http: // nuget.org/packages/DeltaCompressionDotNet /). –

+1

Thư viện lớn ta.speot.is. Tôi đã tò mò nếu có khả năng bạn có thể mở rộng trên nó để tạo ra các tập tin chữ ký, theo cách đó nếu tôi đang làm việc trên mạng, tôi không phải chuyển toàn bộ tập tin qua mạng để lấy delta, và thay vào đó chỉ cần chuyển delta. – ymerej

+0

@Jeremy Cảm ơn. Bạn đang hỏi về một số loại máy chủ vá lỗi đồng bằng, nơi bạn gửi nó một băm của phiên bản hiện tại của tập tin của bạn và nó sẽ gửi cho bạn trở lại một bản vá để mang lại cho nó up-to-date với cái mới nhất? –

1

Fossil SCM có một thuật toán nén đồng bằng thực hiện trong C, và tôi đã thực hiện một cổng của nó trên C# ở đây: https://github.com/endel/FossilDelta

Để tạo vùng đồng bằng, bạn phải cung cấp một byte[] về nguồn gốc và mục tiêu. Nó được trả lại là byte[], bạn có thể áp dụng sau này.

byte[] origin = System.IO.File.ReadAllBytes ("old-file"); 
byte[] target = System.IO.File.ReadAllBytes ("new-file"); 
byte[] delta = Fossil.Delta.Create(origin, target); 

Có đồng bằng, bạn có thể áp dụng những thay đổi trong file gốc như thế này:

byte[] applied = Fossil.Delta.Apply(origin, delta); 

Tôi nghĩ rằng nó đáng nói đến là tác giả của thuật toán này là tác giả cùng của SQLite - vì vậy nó có một số tín nhiệm.

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