Mengapa 7-zip / WinRAR membuka ritsleting file ke "temp" sebelum memindahkannya ke tujuan?
Saya tidak melihat keuntungan apa pun selain langsung membuka ritsleting ke tujuan. Ini sangat menjengkelkan, terutama untuk file besar (seperti sekarang!).
Sunting:
Tolong jelaskan mengapa mereka tidak dilakukan di tempat .
Jawaban:
Bagaimana tepatnya Anda mengekstraksi file? Apakah Anda menggunakan baris perintah atau GUI? Apakah Anda menyeret file atau memilihnya dan menggunakan fungsi ekstrak? Apakah Anda menggunakan menu konteks shell-extension?
Jika Anda memasukkan folder tujuan dan kemudian memilih fungsi ekstrak atau menggunakan ekstensi shell, maka mereka tidak mengekstrak ke folder sementara terlebih dahulu, mereka mengekstrak langsung ke tujuan.
Jika Anda memilih file di UI dan menariknya ke folder target, maka itu akan diekstraksi ke folder sementara.
Alasannya adalah bagaimana tujuan dipilih. Jika Anda memasukkan folder target atau menggunakan item menu konteks, maka program tahu persis di mana ia perlu mengekstraksi. Namun, jika Anda hanya menyeret file, maka karena cara fungsi drag-and-drop dari OLE , program tidak tahu di mana folder target berada. Dengan kata lain, itu adalah Exploreryang menerima folder target, bukan program pengarsipan. Akibatnya, program tidak dapat mengetahui di mana mengekstraknya, dan dengan demikian mengekstraknya ke folder temp, lalu Explorer memindahkannya begitu selesai. Anda dapat melihat ini dengan jelas dengan mengekstraksi file besar menggunakan kedua metode ini. Ketika Anda menyeretnya keluar ke folder, itu ekstrak, maka Anda melihat dialog operasi file standar Explorer memindahkannya ke folder. Jika Anda menentukan folder dan mengeklik Ekstrak, ia mengekstrak dan tidak ada proses lebih lanjut yang dilakukan.
Jangan ragu untuk membaca dengan teliti kode sumber untuk 7-Zip untuk melihat bagaimana lokasi ekstraksi ditangani.
Saya belajar ini dengan cara yang sulit beberapa tahun yang lalu ketika saya ingin menerapkan drag-and-drop dalam program yang saya tulis.
sumber
Hal ini dilakukan agar persyaratan memori untuk dekompresi dijaga agar tetap minimum.
Jika mereka tidak menggunakan sistem file, dekompresi akan terjadi di memori. Di bawah kondisi memori rendah, atau untuk file terkompresi besar ini cepat atau lambat akan kehabisan memori yang tersedia dan memulai proses paging memori.
Paging dalam keadaan ini akan jauh lebih lambat daripada hanya menggunakan filesystem karena file tersebut masih didekompresi (dan file halaman terus ditambahkan), tetapi juga karena file sedang didekompresi, sedang diperiksa untuk kesalahan dan ada seperti itu banyak operasi baca / tulis. Hal terburuk yang dapat terjadi pada file halaman.
EDIT: Mengenai penggunaan direktori sementara, ini adalah untuk mengikuti banyak pedoman sistem operasi. Jika dekompresi gagal, tidak ada jaminan program yang melakukan operasi itu membersihkan sendiri. Misalnya, mungkin macet. Dengan demikian, tidak ada file residual yang tersisa di direktori target Anda dan sistem operasi akan membuang file sementara ketika dianggap tepat.
sumber
Alasannya lebih sederhana daripada yang Anda pikirkan: Banyak program membuka paket file ke% temp%, karena sistem file tujuan mungkin tidak memiliki cukup ruang.
Sekarang, Anda mungkin tahu bahwa sistem file Anda mungkin memiliki cukup ruang, tetapi aplikasi tidak. Bagaimana jika filesystem tersebut digunakan oleh OS atau aplikasi lain dan terisi saat mendekompres?
Pengembang membuat asumsi bahwa% temp% memiliki ruang "tidak terbatas", sedangkan tujuan Anda tidak.
sumber
Bukan sebagai pengembang 7-zip atau WinRAR, komentar saya di sini murni spekulasi. Yang sedang berkata, menggunakan ruang temp untuk membongkar sampai semuanya selesai membantu untuk memverifikasi bahwa semua file utuh (yaitu bahwa zip tidak rusak).
Tidak ada yang lebih buruk daripada membongkar file terkompresi besar, setelah mulai bekerja pada file di awal arsip; hanya untuk mengetahui bahwa ada sesuatu yang rusak di akhir arsip. Pada saat itu Anda kehilangan kepercayaan pada segalanya.
Komentar terakhir saya adalah saya tidak ingat melihat perilaku ini dari 7-zip. Ketika saya klik kanan dan katakan ekstrak di sini, saya biasanya memiliki akses ke file saat mereka sedang dibongkar. Sudahkah Anda mengecek bahwa itu bukan pengaturan di suatu tempat?
sumber