Mam spakowany plik o rozmiarze kilku GB, chcę uzyskać rozmiar rozpakowanej zawartości, ale nie chcę rozpakować pliku w C#, co może być biblioteką, której mogę użyć ? Po kliknięciu prawym przyciskiem myszy na pliku .gz i przejściu do Właściwości następnie pod zakładką Archive
znajduje się nazwa właściwości TotalLength
, która pokazuje tę wartość. Ale chcę uzyskać to programowo przy użyciu C# .. Jakiś pomysł?Plik GZIP Całkowita długość w C#
Odpowiedz
Ostatnie 4 bajty pliku gz zawiera długość.
Tak powinno być coś takiego:
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, znacznie lepiej; Nie wiem, jak to się dzieje, gdy> 4GB choć –
Dzięki Leppie ... faktycznie w moim przypadku plik będzie mniejszy niż 4 GB ... Dziękujemy za pomoc ... –
@johnnyrose: Dzięki za korektę literówki: 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;
}
EDYCJA: Zobacz odpowiedzi autorstwa Leppie i Gabe; jedynym powodem Trzymam to (a nie usuwając go) jest to, że może to być konieczne, jeśli podejrzewasz, że długość jest> 4GB
Dla gzip, że dane nie wydaje się być bezpośrednio dostępne - ja "Patrzyłem na GZipStream
i odpowiednik SharpZipLib - nie działa. Najlepsze, co mogę zasugerować to, aby go uruchomić lokalnie:
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;
}
}
Jeśli to był błyskawiczny, następnie SharpZipLib:
long size = 0;
using(var zip = new ZipFile(path)) {
foreach (ZipEntry entry in zip) {
size += entry.Size;
}
}
Dzięki Marc, pierwsza metoda zadziałała dla mnie ... ale jej zajęcie trwa zbyt długo, aby obliczyć plik bez kompresji o pojemności 2 GB ... i powinno być tak, jak liczymy w pętli ... Czy nie ma szybkiej metody? –
@Ummar: Zarówno Gabe, jak i ja wyjaśniliśmy "poprawny" sposób robienia tego. Powyższy sposób zadziała, ale wyobraź sobie, że używając go na tysiącach plików 2GB, zajmie to całe wieki. – leppie
@Ummar - patrz odpowiedź @ leppiego –
Ostatnim dla bajtów pliku .gz są wielkości Modulo wejściowy nieskompresowany 2^32. Jeśli nieskompresowany plik nie jest większy niż 4 GB, po prostu przeczytaj ostatnie 4 bajty pliku. Jeśli masz większy plik, nie jestem pewien, czy można go uzyskać bez dekompresji strumienia.
- 1. długość całkowita w javascript
- 2. Arbitralna długość całkowita w Ada
- 3. Długość w czasie plik wave
- 4. Dekompresuje plik gzip do określonego katalogu
- 5. Co robi "* (wskaźnik + liczba całkowita)" w C++?
- 6. Jak sprawdzić, czy plik jest skompresowany gzip?
- 7. Napisz plik gzip z ramki danych
- 8. uzyskać długość `wchar_t *` w C++
- 9. GZip w Androidzie
- 10. Magiczna liczba w nagłówku GZip jest niepoprawna. Upewnij się, że przekazujesz strumień GZip. (Plik exe)
- 11. Jak sprawdzić, czy plik jest gzip lub nie w java
- 12. Pobierz i rozpakuj spakowany plik gzip w pamięci?
- 13. 1-bajtowa liczba całkowita bez znaku C++
- 14. Jak rozpakować plik zip C#
- 15. Obsługa spakowanych treści gzip na Androidzie
- 16. C# Tworzenie stringów (podana długość)
- 17. Dekompresowanie GZip w Haskell
- 18. Obsługa gzip w Spark
- 19. Jak uzyskać długość IStream? C++
- 20. Liczba całkowita do tablicy binarnej
- 21. Jak znaleźć długość argv [] w C
- 22. Jak znaleźć długość niepodpisane char * w C
- 23. Maksymalna długość wektora w R
- 24. Scal sortowane pliki gzip
- 25. Czy istnieje standardowa cykliczna klasa całkowita w C++?
- 26. WinRAR "Całkowita długość ścieżki i nazwy pliku nie może przekraczać 260 znaków"
- 27. Ciągła liczba całkowita działa
- 28. Jak utworzyć identyczny plik gzip z tego samego pliku?
- 29. Wartość całkowita w zasobach WPF?
- 30. duża liczba całkowita dodana z CUDA
Informacja może być obecna w nagłówku programu gzip. Ale nie mogę pomóc więcej. – leppie