Mengapa 7-zip / WinRAR membuka ritsleting file ke "temp" sebelum memindahkannya ke tujuan?

50

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 .

Stevoisiak
sumber
3
Jika Anda menetapkan `` sebagai folder sementara di WinRAR, itu harus mengekstrak langsung ke tujuan.

Jawaban:

82

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.

Synetech
sumber
7
Benar-benar brilian - terima kasih untuk ini! Ini telah mengejutkan saya selama bertahun-tahun, tetapi saya tidak pernah meluangkan waktu untuk melacak "apa" dan mengapa ". Saat aneh saya menemukan folder C: temp saya terisi ke whazoo, saya menelusuri opsi Winrar untuk menemukan di mana itu harus disetel terlebih dahulu untuk mengekstrak ke folder temp di C :. Tapi sayangnya, saya tidak menemukannya. Saya tidak pernah menghubungkan korelasi antara dua metode, dan sekarang menghargai melihat cahaya :) Terima kasih!
Coldblackice
2
Satu hal yang salah di sini adalah bahwa Explorer tidak memindahkan file tetapi menyalinnya . Yang benar - benar menjengkelkan karena bergerak sangat cepat (kecuali ketika berpindah dari satu partisi ke partisi lain) dan seharusnya menjadi pilihan yang ideal (tidak membuang-buang ruang), tetapi para idiot di Microsoft berpikir itu ide bagus untuk menyalin dari folder sementara kemudian tinggalkan data folder sementara di sekitar. Tidak hanya ekstraksi arsip besar akan mengambil dua kali lipat ruang, itu juga akan memakan waktu hampir dua kali lipat!
ADTC
Mereka mungkin memiliki alasan yang bagus untuk itu, dan itu mungkin disebabkan oleh semacam keterbatasan sistem dan / atau DDE yang menjadi dasarnya, ketika mereka pertama kali merancang OLE, pada zaman Windows 3; batasan yang mungkin atau mungkin tidak berlaku hari ini.
Synetech
1
Ya, ini konyol, terutama pada mesin virtual dengan ruang terbatas. Menggunakan "ekstrak ke" unzip arsip RAR 8GB dengan 6000+ file dalam waktu sekitar 1 menit. Namun, jika Anda menyeret folder keluar, dibutuhkan jumlah waktu yang sama untuk unzip ke direktori temp, tetapi selain itu, membekukan jendela target dan kemudian SALINKAN file selama lebih dari 15 menit dengan hanya 3mb / s. Ini terutama lambat menyalin file pada drive yang sama (mungkin karena sistem file virtual yang mendasarinya), meskipun saya dapat menyalin file dari mesin virtual lain ke mesin ini melalui jaringan pada ratusan MB / s.
Triynko
1
Saya kira pekerjaan potensial sekitar akan membuat file 0 byte dengan nama GUID yaitu praktis tidak mungkin terjadi sebagai nama file duplikat. Kemudian monitor file explorer.exe menangani untuk melihat di mana ia menyalin file tersebut. Terakhir ekstrak arsip ke tujuan.
Zv_oDD
1

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.

A Dwarf
sumber
3
Meskipun benar, itu tidak menjelaskan mengapa file dikompres ke direktori sementara terlebih dahulu dan kemudian dipindahkan ke yang tujuan. Operasi juga bisa terjadi di sana.
slhck
3
Diedit untuk lebih mencerminkan pertanyaan Anda
A Dwarf
4
@Ante, itu tidak benar. Memindahkan file pada partisi yang sama hanya mengubah indeks file dalam sistem file ke direktori baru, itu tidak menyalin data apa pun dan hanya mengambil instan. Tidak percaya padaku Cobalah, potong file multi-GB dari satu folder dan tempel ke folder lain; dibutuhkan kurang dari satu detik. Mereka mencoba hal yang sama ke drive atau partisi lain. Butuh beberapa menit.
Dour High Arch
3
Re "sistem operasi akan membuang file sementara ketika dianggap tepat": Apakah Windows pernah melakukan itu?
grawity
1
Jawaban yang sepenuhnya salah ini harus dihilangkan. 7zip hanya mendekompres ke folder temp selama operasi drag-and-drop dan ini disebabkan oleh keterbatasan Windows. Lihat superuser.com/questions/197961/… untuk info lebih lanjut.
dss539
-1

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.

Keltari
sumber
Tidak terlalu; itu bukan alasan untuk menggunakan direktori temp. Aplikasi tidak (atau setidaknya bisa) tahu apakah ada cukup ruang atau tidak. Pertama, pengarsipan tahu persis seberapa besar file terkompresi ketika mereka didekompresi dan dapat mengalokasikannya terlebih dahulu, dan kemudian mengisinya ketika mendekompresi, dan kedua, cukup sederhana untuk meminta ruang kosong pada drive. Selain itu, jika tidak ada ruang yang cukup, maka ia hanya bisa mendekompres selagi bisa, lalu melempar kesalahan saat kehabisan ruang.
Synetech
Sebenarnya, ini jawabannya. Hanya karena suatu aplikasi dapat mengalokasikan kembali ruang pada tujuan target, tidak berarti itu akan memiliki akses eksklusif ke sana. Aplikasi dapat meminta tujuan dan melihat apakah memiliki ruang yang cukup, tetapi sementara permintaan itu terjadi, sebelum dapat mengalokasikan ruang, aplikasi lain dapat mengambil sebagian dari ruang itu.
Keltari
Selain itu, ruang temp pengguna terkait dengan pengguna tersebut di tingkat sistem file. Jika ada kerusakan atau kegagalan lain, pengguna lain tidak dapat melihat file temp. Tujuan mungkin tidak memiliki batasan keamanan seperti itu, jadi lebih aman untuk tidak memiliki data sensitif yang mungkin nongkrong di sistem file lain.
Keltari
Seperti saya katakan, jika habis saat dekompresi, itu hanya memberikan pesan kesalahan. Bagaimana cara mengekstraksi ke temp drive memperbaikinya? Jika tidak ada ruang yang cukup, maka tidak ada ruang yang cukup setelah file diekstraksi ke drive temp, dan itu membuang semua siklus CPU dan drive membaca / menulis mengekstraksi ke drive temp untuk apa-apa. Seperti yang saya katakan dalam jawaban saya, silakan membaca kode sumber untuk 7-Zip, atau hubungi Alexander Roshal untuk menanyakan kepadanya tentang WinRAR. Selain itu, seperti yang saya katakan, jika Anda menentukan target atau menggunakan menu konteks, itu tidak menggunakan% temp%.
Synetech
-2

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?

Gereja
sumber
Paragraf ke-3: Saya tidak dapat menemukan pengaturan seperti itu, dan itu adalah sekelompok besar file (4G) yang saya ekstrak sekarang, saya cukup yakin semua 4G akhirnya dipindahkan dengan lambat.
Paragraf 2: ekstrak ke "temp" tidak mencegah apa pun jika file zip sudah rusak.
Ini mencegah Anda melihat file keluar dari zip rusak. Logikanya adalah Anda tidak dapat melihat apa pun sampai semuanya diverifikasi. Sejauh pengaturan berlangsung, saya tidak yakin harus mengatakan apa kepada Anda. Jika saya memberi tahu 7-zip untuk mengekstrak file tar besar ke Desktop saya, saya segera mulai melihat file-file itu. Bisa jadi karena tar bukan format terkompresi.
Kirk
> Logikanya adalah bahwa Anda tidak dapat melihat apa pun sampai semuanya diverifikasi. Itu tidak masuk akal. Lalu bagaimana Anda memulihkan beberapa file dari arsip yang rusak? Alasan Anda tidak mengalaminya adalah karena Anda menggunakan ekstensi shell alih-alih menyeret file dari GUI.
Synetech