Tôi có tệp nén có kích thước vài GB, tôi muốn lấy kích thước của Nội dung chưa giải nén nhưng không muốn giải nén tệp trong C#, Thư viện nào tôi có thể sử dụng ? Khi tôi nhấp chuột phải vào tập tin .gz và vào Properties sau đó dưới Archive
Tab có một tên bất động sản TotalLength
đang hiển thị giá trị này. Nhưng tôi muốn làm cho nó lập trình bằng cách sử dụng C# .. Bất kỳ ý tưởng?Tệp GZIP Tổng chiều dài trong C#
Trả lời
4 byte cuối cùng của tập tin gz chứa chiều dài.
Vì vậy, nó phải được cái gì đó như:
using(var fs = File.OpenRead(path))
{
fs.Position = fs.Length - 4;
var b = new byte[4];
fs.Read(b, 0, 4);
uint length = BitConverter.ToUInt32(b, 0);
Console.WriteLine(length);
}
ah, tốt hơn nhiều; Tôi không chắc làm thế nào điều này được xử lý khi> 4GB mặc dù –
Cảm ơn Leppie ... thực sự trong trường hợp của tôi tập tin sẽ ít hơn 4GB ... Cảm ơn sự giúp đỡ của bạn ... –
@ johnnyrose: Cảm ơn bạn đã sửa lỗi chính tả: D – leppie
public static long mGetFileLength(string strFilePath)
{
if (!string.IsNullOrEmpty(strFilePath))
{
System.IO.FileInfo info = new System.IO.FileInfo(strFilePath);
return info.Length;
}
return 0;
}
EDIT: Xem câu trả lời của Leppie và Gabe; lý do duy nhất tôi giữ điều này (thay vì xóa nó) là có thể cần thiết nếu bạn nghi ngờ độ dài> 4GB
Đối với gzip, dữ liệu đó dường như không có sẵn trực tiếp - I đã xem xét GZipStream
và tương đương SharpZipLib - không hoạt động. Điều tốt nhất tôi có thể đề nghị là để chạy nó tại địa phương:
long length = 0;
using(var fs = File.OpenRead(path))
using (var gzip = new GZipStream(fs, CompressionMode.Decompress)) {
var buffer = new byte[10240];
int count;
while ((count = gzip.Read(buffer, 0, buffer.Length)) > 0) {
length += count;
}
}
Nếu đó là một zip, sau đó SharpZipLib:
long size = 0;
using(var zip = new ZipFile(path)) {
foreach (ZipEntry entry in zip) {
size += entry.Size;
}
}
Cảm ơn Marc, phương pháp đầu tiên đã làm việc cho tôi .. nhưng mất quá nhiều thời gian để tính toán một tệp không nén 2 GB ... và nó phải như chúng ta đếm trong vòng lặp ... Không có cách nào nhanh chóng? –
@Ummar: Cả Gabe và bản thân tôi đều giải thích cách làm đúng đắn. Cách trên sẽ làm việc, nhưng hãy tưởng tượng sử dụng nó trên 1000 của các tập tin 2GB, nó sẽ mất mãi mãi. – leppie
@Ummar - xem câu trả lời của @ leppie –
cuối cùng cho byte của một tập tin gz là đầu vào không nén kích thước modulo 2^32. Nếu tệp không nén của bạn không lớn hơn 4GB, chỉ cần đọc 4 byte cuối cùng của tệp. Nếu bạn có tệp lớn hơn, tôi không chắc chắn rằng nó có thể nhận được mà không giải nén luồng.
- 1. Python: Tổng chiều dài chuỗi
- 2. Couting ký tự, từ, chiều dài của các từ và tổng chiều dài trong câu
- 3. Tổng chiều dài chuỗi của hai nút khác nhau với Xpath - Tổng hai nút có chiều dài chuỗi
- 4. WinRAR "Tổng chiều dài đường dẫn và tên tệp không được vượt quá 260 ký tự"
- 5. Cách nhanh nhất để đọc chiều dài tệp C#
- 6. Kích thước mảng (Chiều dài) trong C#
- 7. Chiều dài cố định chiều dài đệm trong haskell
- 8. mảng chiều dài Variable (VLA) trong C và C++
- 9. gzip một tệp trong Python
- 10. 2d chiều dài hàng/cột mảng C
- 11. Macro chiều dài mảng chung cho C?
- 12. C, malloc() và chiều dài mảng
- 13. Giải nén GZIP C# OutOfMemory
- 14. Sắp xếp tên tệp theo chiều dài của tên tệp
- 15. chiều dài tên tệp tối đa trong Android
- 16. Mảng có chiều dài không xác định trong C#
- 17. Tìm chiều dài của một Mảng nhân vật trong C
- 18. Tổng chiều cao của trang
- 19. Mảng Chiều dài trong Java
- 20. Chiều dài của từ dài nhất trong một danh sách
- 21. Kéo dài chiều dài của trục lô trong R?
- 22. Đọc từ một tệp gzip trong python
- 23. Nhận chiều dài của mảng chuỗi không rõ chiều dài
- 24. Chiều dài dữ liệu so với chiều dài CRC
- 25. nhận chiều dài/số NSArray - Mục tiêu C
- 26. GZip mỗi tệp riêng biệt
- 27. đối số chiều dài Tiềm ẩn trong chiều dài cố định-vector-chức năng trong Agda
- 28. Tìm chiều dài đường viền trong opencv
- 29. Chiều dài chuỗi bash
- 30. chiều dài đế
Thông tin có thể có trong tiêu đề gzip. Nhưng tôi không thể giúp nhiều hơn thế. – leppie