Saya mencoba secara unzip membuka file zip.
Saya telah mencoba menggunakan System.IO.Compression.GZipStream
kelas di .NET, tetapi ketika aplikasi saya berjalan (sebenarnya tes unit) saya mendapatkan pengecualian ini:
System.IO.InvalidDataException: Angka ajaib di header GZip tidak benar. Pastikan Anda melewati aliran GZip ..
Saya sekarang menyadari bahwa .zip
file tidak sama dengan .gz
file, dan itu GZip
tidak sama dengan Zip
.
Namun, karena saya dapat mengekstrak file dengan mengklik dua kali file zip secara manual dan kemudian mengklik tombol "Ekstrak semua file", saya pikir harus ada cara untuk melakukan itu dalam kode juga.
Karena itu saya sudah mencoba menggunakan Process.Start()
path ke file zip sebagai input. Ini menyebabkan aplikasi saya membuka Window yang memperlihatkan konten dalam file zip. Tidak apa-apa, tetapi aplikasi akan diinstal pada server tanpa ada yang mengklik tombol "Ekstrak semua file".
Jadi, bagaimana cara mendapatkan aplikasi saya untuk mengekstrak file dalam file zip?
Atau adakah cara lain untuk melakukannya? Saya lebih suka melakukannya dalam kode, tanpa mengunduh perpustakaan atau aplikasi pihak ketiga; departemen keamanan tidak terlalu suka tentang itu ...
Jawaban:
Kami telah menggunakan SharpZipLib dengan sukses di banyak proyek. Saya tahu ini alat pihak ketiga, tetapi kode sumber disertakan dan dapat memberikan wawasan jika Anda memilih untuk menemukan kembali roda di sini.
sumber
Dengan .NET 4.5 Anda sekarang dapat unzip file menggunakan .NET framework:
Kode di atas diambil langsung dari dokumentasi Microsoft: http://msdn.microsoft.com/en-us/library/ms404280(v=vs.110).aspx
ZipFile
terkandung dalam majelisSystem.IO.Compression.FileSystem
. (Terima kasih nateirvin ... lihat komentar di bawah)sumber
ZipFile
terkandung dalam majelisSystem.IO.Compression.FileSystem
.System.IO.Compression.FileSystem.dll
.A local file header is corrupt
. Adakah yang memikirkan hal ini?Untuk .Net 4.5+
Tidak selalu diinginkan untuk menulis file yang tidak dikompresi ke disk. Sebagai pengembang ASP.Net, saya harus mengutak-atik izin untuk memberikan hak bagi aplikasi saya untuk menulis ke sistem file. Dengan bekerja dengan stream dalam memori, saya dapat menghindari semua itu dan membaca file secara langsung:
Atau, Anda masih bisa menulis file yang sudah dikompresi ke disk dengan memanggil
ExtractToFile()
:Untuk menggunakan
ZipArchive
kelas, Anda perlu menambahkan referensi keSystem.IO.Compression
namespace danSystem.IO.Compression.FileSystem
.sumber
ZipArchive
Objek baru cocok dengan tagihan.foreach
perulanganExtractToFile
ketika saya hanya dapat menggunakanZipFile.ExtractToDirectory(inputFile, outputDir);
Apa keuntungan dari metode pertama?Gratis, dan tidak ada file DLL eksternal. Semuanya ada dalam satu file CS. Satu unduhan hanyalah file CS, unduhan lain adalah contoh yang sangat mudah dimengerti. Baru saja mencobanya hari ini dan saya tidak percaya betapa mudahnya pengaturannya. Ini berhasil pada percobaan pertama, tidak ada kesalahan, tidak apa-apa.
https://github.com/jaime-olivares/zipstorer
sumber
Gunakan perpustakaan DotNetZip di http://www.codeplex.com/DotNetZip
sumber
Untuk menggunakan kelas ZipFile, Anda harus menambahkan referensi ke perakitan System.IO.Compression.FileSystem di proyek Anda
sumber
File zip standar biasanya menggunakan algoritma deflate.
Untuk mengekstrak file tanpa menggunakan perpustakaan pihak ketiga menggunakan DeflateStream. Anda akan memerlukan sedikit lebih banyak informasi tentang format arsip file zip karena Microsoft hanya menyediakan algoritma kompresi.
Anda juga dapat mencoba menggunakan zipfldr.dll. Ini adalah perpustakaan kompresi Microsoft (folder terkompresi dari menu Kirim ke). Tampaknya menjadi perpustakaan com tetapi tidak berdokumen. Anda mungkin bisa membuatnya bekerja untuk Anda melalui eksperimen.
sumber
Saya menggunakan ini untuk zip atau unzip banyak file. Hal-hal Regex tidak diperlukan, tetapi saya menggunakannya untuk mengubah cap tanggal dan menghapus garis bawah yang tidak diinginkan. Saya menggunakan string kosong dalam string Compress >> zipPath untuk mengawali sesuatu ke semua file jika diperlukan. Juga, saya biasanya berkomentar Kompres () atau Dekompresi () berdasarkan apa yang saya lakukan.
sumber
Ini akan melakukannya
System.IO.Compression.ZipFile.ExtractToDirectory(ZipName, ExtractToPath)
sumber
Dari sini :
sumber
Anda dapat melakukan semuanya dalam. NET 3.5 menggunakan DeflateStream. Hal yang kurang dalam. NET 3.5 adalah kemampuan untuk memproses bagian header file yang digunakan untuk mengatur file zip. PKWare telah menerbitkan informasi ini, yang dapat Anda gunakan untuk memproses file zip setelah Anda membuat struktur yang digunakan. Ini tidak terlalu berat, dan ini merupakan praktik yang baik dalam membangun alat tanpa menggunakan kode pihak ke-3.
Itu bukan jawaban satu baris, tetapi sepenuhnya bisa dilakukan jika Anda bersedia dan dapat mengambil waktu sendiri. Saya menulis sebuah kelas untuk melakukan ini dalam beberapa jam dan apa yang saya dapatkan dari itu adalah kemampuan untuk zip dan unzip file menggunakan. NET 3.5 saja.
sumber
Saya mengetahui tentang hal ini (paket Unzip di NuGet) hari ini, karena saya bertemu dengan bug keras di DotNetZip, dan saya menyadari belum ada banyak pekerjaan yang dilakukan pada DotNetZip selama dua tahun terakhir.
Paket Unzip ramping, dan berhasil bagi saya - tidak memiliki bug yang dimiliki DotNetZip. Juga, itu adalah file yang cukup kecil, mengandalkan Microsoft BCL untuk dekompresi yang sebenarnya. Saya dapat dengan mudah membuat penyesuaian yang saya butuhkan (untuk dapat melacak kemajuan sambil mendekompresi). Saya merekomendasikannya.
sumber
Dari Sumber Embed:
sumber
Sampai sekarang, saya menggunakan proses cmd untuk mengekstrak file .iso, menyalinnya ke jalur sementara dari server dan diekstraksi pada usb stick. Baru-baru ini saya menemukan bahwa ini bekerja dengan sempurna dengan .iso yang kurang dari 10GB. Untuk iso seperti 29GB metode ini macet entah bagaimana.
sumber
Anda dapat menggunakan Info-unzip cod command line. Anda hanya perlu mengunduh unzip.exe dari situs web resmi Info-unzip.
sumber