Bagaimana cara membuat arsip 7-Zip dari aplikasi konsol C # saya? Saya harus dapat mengekstrak arsip menggunakan program 7-Zip reguler yang tersedia secara luas .
Berikut adalah hasil saya dengan contoh yang diberikan sebagai jawaban atas pertanyaan ini
- "Menerobos" ke 7z.exe - ini adalah pendekatan yang paling sederhana dan efektif, dan saya dapat memastikan bahwa ini berfungsi dengan baik . Seperti yang disebutkan oleh workmad3 , saya hanya perlu menjamin bahwa 7z.exe diinstal pada semua mesin target, yang dapat saya jamin.
- 7Zip dalam kompresi memori - ini mengacu pada mengompresi cookie "dalam memori" sebelum mengirim ke klien; metode ini sepertinya cukup menjanjikan. Jenis pengembalian metode pembungkus (membungkus LZMA SDK )
byte[]
. Ketika saya menulisbyte[]
array ke file, saya tidak dapat mengekstraknya menggunakan 7-Zip (File.7z is not supported archive
). - 7zSharp Wrapper (ditemukan di CodePlex) - ini membungkus 7z exe / LZMA SDK . Saya mereferensikan proyek dari aplikasi saya, dan berhasil membuat beberapa file arsip, tetapi saya tidak dapat mengekstrak file menggunakan program 7-Zip biasa (
File.7z is not supported archive
). - 7Zip SDK alias LZMA SDK - Saya kira saya tidak cukup pintar untuk mengetahui cara menggunakan ini (itulah sebabnya saya posting di sini) ... Setiap contoh kode kerja yang menunjukkan pembuatan arsip 7zip yang dapat diekstraksi oleh program 7zip biasa?
- CodeProject C # (.NET) Interface untuk 7-Zip Arsip DLL - hanya mendukung ekstraksi dari arsip 7zip ... Saya perlu membuatnya!
- SharpZipLib - Menurut FAQ mereka , SharpZipLib tidak mendukung 7zip.
c#
.net
compression
7zip
Seibar
sumber
sumber
Jawaban:
Jika Anda dapat menjamin aplikasi 7-zip akan diinstal (dan di jalur) di semua mesin target, Anda dapat melepas beban dengan memanggil aplikasi baris perintah 7z. Bukan solusi yang paling elegan, tetapi yang paling berhasil.
sumber
Contoh cookie EggCafe 7Zip Ini adalah contoh (cookie zip) dengan DLL 7Zip.
CodePlex Wrapper Ini adalah proyek open source yang membengkokkan fungsi zipping 7z.
7Zip SDK SDK resmi untuk 7zip (C, C ++, C #, Java) <--- Saran saya
Perpustakaan zip bersih oleh SharpDevelop.net
Contoh CodeProject dengan 7zip
SharpZipLib Banyak ritsleting
sumber
SevenZipSharp adalah solusi lain. Membuat arsip 7-zip ...
sumber
Berikut adalah contoh kerja lengkap menggunakan SevenZip SDK di C #.
Ini akan menulis, dan membaca, file 7zip standar seperti yang dibuat oleh aplikasi Windows 7zip.
PS. Contoh sebelumnya tidak akan pernah melakukan dekompresi karena tidak pernah menulis informasi properti yang diperlukan di awal file.
sumber
Saya menggunakan sdk.
misalnya:
sumber
Cukup Instal 7 zip dari sumber dan berikan parameter ke metode.
Terima kasih. Mohon suka jawabannya.
sumber
Saya menggunakan kode ini
sumber
Instal paket NuGet bernama
SevenZipSharp.Interop
Kemudian:
sumber
Beberapa info uji tambahan pada kode @Orwellophile menggunakan file teks 17,9MB.
Menggunakan nilai properti dalam contoh kode "sebagaimana adanya" akan berdampak negatif BESAR pada kinerja, dibutuhkan waktu 14,16 detik .
Menyetel properti berikut melakukan pekerjaan yang sama pada 3,91 detik (ia arsip akan memiliki info wadah yang sama yaitu: Anda dapat mengekstrak dan menguji arsip dengan 7zip tetapi tidak ada informasi nama file)
Asli 7zip 2 detik.
Saya melakukan tes lain menggunakan native 7zip dan file backup SQL 1,2GB (.bak)
7zip (kompresi maksimum): 1 menit
LZMA SDK (@Orwellophile dengan pengaturan properti di atas): 12:26 min :-(
Outputfile berukuran kira-kira sama .
Jadi saya kira saya sendiri akan menggunakan solusi berdasarkan mesin c / c ++, ia memanggil 7zip yang dapat dieksekusi dari c # atau menggunakan squid-box / SevenZipSharp , yang merupakan pembungkus di sekitar file 7zip c / c ++ dll, dan tampaknya menjadi fork terbaru dari SevenZipSharp. Belum menguji pembungkusnya, tapi saya harap kinerjanya sama seperti 7zip asli. Tetapi mudah-mudahan ini akan memberikan kemungkinan untuk mengompresi aliran juga yang Anda jelas tidak bisa jika Anda memanggil exe secara langsung. Kalau tidak, saya kira tidak ada keuntungan lebih dari memanggil exe. Wrapper memiliki beberapa dependensi tambahan sehingga tidak akan membuat proyek yang Anda terbitkan "lebih bersih".
Ngomong-ngomong, tampaknya tim .Net Core mempertimbangkan untuk mengimplementasikan LZMA di kelas system.io di .Core ver. 5, itu akan luar biasa!
(Saya tahu ini semacam komentar dan bukan jawaban tetapi untuk dapat memberikan cuplikan kode, itu tidak bisa menjadi komentar)
sumber
Cara termudah ini adalah bekerja dengan file .zip daripada .7z dan menggunakan Zip Dot Net
Saat menjalankan perintah 7zip ke shell, ada masalah lain seperti hak pengguna, saya mengalami masalah dengan SevenZipSharp.
sumber
SharpCompress menurut saya adalah salah satu pustaka kompresi paling cerdas yang pernah ada. Mendukung LZMA (7-zip), mudah digunakan dan dalam pengembangan aktif.
Karena sudah memiliki dukungan streaming LZMA, sayangnya pada saat penulisan ini hanya mendukung pembacaan arsip 7-zip. TETAPI penulisan arsip ada di daftar agenda mereka (lihat readme). Untuk pembaca selanjutnya: Periksa untuk mendapatkan status saat ini di sini: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md
sumber