Neden 7-zip / WinRAR, dosyaları hedeflerine taşımadan önce “temp” a sıkıştırıyor?


50

Neden 7-zip / WinRAR, dosyaları hedeflerine taşımadan önce "temp" a sıkıştırıyor?

Hedefe doğrudan açılmaya karşı hiçbir avantaj görmüyorum. Özellikle büyük dosyalar için (şimdi olduğu gibi!) Gerçekten rahatsız edicidir.


Düzenle:

Lütfen neden yerinde olmadıklarını açıklayın .


3
WinRAR'da geçici klasör olarak `` belirtirseniz, doğrudan hedefe ayıklanması gerekir.

Yanıtlar:


82

Dosyaları tam olarak nasıl açıyorsun? Komut satırı veya GUI kullanıyor musunuz? Dosyaları sürükliyor mu yoksa seçip ayıklama işlevini mi kullanıyorsunuz? Kabuk uzantısı bağlam menüsünü mü kullanıyorsunuz?

Eğer bir hedef klasörü girin ve ardından ekstrakt fonksiyonunu seçmek veya kabuk uzantısı kullanırsanız, o zaman yok onlar hedefe doğrudan ayıklamak, ilk geçici bir klasöre ayıklamak.

Kullanıcı arayüzünde dosyaları seçin ve varsa sürüklemek hedef klasöre, o zaman olacak geçici bir klasöre ayıklamak.

Bunun nedeni, hedefin nasıl seçildiği ile ilgilidir. Hedef klasöre girerseniz ya da bağlam menüsü öğesini kullanırsanız, program tam olarak nereye çıkması gerektiğini bilir. Eğer sadece o nedeniyle sürükle ve bırak işlevi nasıl dosyaları, sürükle Ancak, OLE işleri hedef klasörü olduğu program bilmiyor. Başka bir deyişle, ExplorerArşivleme programını değil, hedef klasörü alır. Sonuç olarak, program onları nereye çıkaracağını bilemez ve bu yüzden onları geçici klasöre çıkarır, ardından Explorer bunları tamamladıktan sonra taşır. Her iki yöntemi de kullanarak büyük bir dosyayı ayıklayarak bunu açıkça görebilirsiniz. Bir klasöre sürüklediğinizde, ayıklar, sonra Explorer'ın standart dosya işlemi iletişim kutusunu klasöre taşıdığını görürsünüz. Klasörü belirlerseniz ve Ayıkla'yı tıklatırsanız, ayıklanır ve başka bir işlem yapılmaz.

Çıkarma konumunun nasıl işlendiğini görmek için 7-Zip kaynak kodunu incelemek için çekinmeyin .


Bunu birkaç yıl önce, yazdığım bir programda sürükle ve bırak özelliğini uygulamak istediğimde zor yoldan öğrendim.


7
Kesinlikle brilliant - bunun için teşekkürler! Bu beni yıllardır boggled, ama "ne" ve neden "ini bulmak için hiç zamanım olmadı. Tuhaf zamanlar C: temp klasörümü whazoo ile doldurdum, Winrar'ın nerede olduğunu bulmak için seçenekleri deniyorum ilk önce C: 'deki geçici bir klasöre çıkarmak için ayarlanması gerekir. Fakat ne yazık ki, onu bulamıyorum, iki yöntem arasındaki ilişkiyi hiçbir zaman
bağlamadım

2
Burada yanlış bir şey Explorer olmamasıdır hareket dosyayı ziyade kopyalar o. Bu gerçekten sinir bozucu çünkü hareket etme çok hızlı (bölümden bölüme geçerken hariç) ve ideal bir seçim olmalıydı (alan boşa harcanmıyor), ancak Microsoft'taki aptallar geçici klasörden kopyalamanın harika bir fikir olduğunu düşünüyorlardı. daha sonra geçici klasör verilerini etrafta yatarak bırakın Büyük bir arşivin çıkartılması sadece iki katına çıkacak, aynı zamanda neredeyse iki kat daha uzun sürecek!
ADTC

Muhtemelen bunun için iyi bir nedenleri vardı ve bunun nedeni, Windows 3 günlerinde OLE'yi ilk kez tasarladıklarında, temel aldığı sistemler ve / veya DDE'nin bir tür kısıtlaması olabilirdi; bugün uygulanabilecek veya uygulanmayabilecek bir sınırlama.
Synetech

1
Evet, özellikle sınırlı alana sahip sanal bir makinede saçma. "Çıkartmak" kullanmak, yaklaşık 1 dakika içinde 6000+ dosya içeren 8GB'lik bir RAR arşivini açar. Ancak, klasörleri dışarı sürüklerseniz, geçici bir dizine açmak için aynı miktarda zaman alır, ancak ek olarak, hedef pencereyi dondurur ve ardından dosyaları yalnızca 3 mb / s'de 15 dakikadan fazla KOPYALANIR. Bir dosyayı, aynı sürücüdeki (muhtemelen altta yatan sanal dosya sistemi nedeniyle) kopyalamak ağda, başka bir sanal makineden bir dosyayı bu makineye ağ üzerinden yüzlerce MB / s hızında kopyalayabilmeme rağmen yavaş.
Triynko

1
Sanırım etrafta potansiyel bir çalışma GUID ismiyle 0 baytlık bir dosya oluşturmaktır, yani çift dosya adı olarak ortaya çıkması neredeyse pratik değildir. Sonra explorer.exe dosyasının dosyasını, dosyayı nereye kopyaladığını görmek için denetler. Sonunda arşivi hedefe çıkartın.
Zv_oDD

1

Bu, dekompresyon için hafıza gereksinimleri minimumda tutulacak şekilde yapılır.

Dosya sistemini kullanmadılarsa, dekompresyon bellekte olur. Düşük bellek koşullarında veya büyük sıkıştırılmış dosyalar için bu er ya da geç kullanılabilir belleği tüketir ve bellek sayfalama işlemini başlatır.

Bu koşullar altında disk belleği dosya hala sıkıştırılmakta olduğundan (ve sayfa dosyaları eklenmeye devam ettiğinden) sadece dosya sistemini kullanmaktan çok daha yavaş olacaktır, fakat aynı zamanda dosya sıkıştırılmakta olduğu için hatalar da kontrol edilmektedir ve Bir çok okuma / yazma işlemi. Sayfa dosyasına olabilecek en kötü şey.

EDIT: Geçici bir dizinin kullanımı ile ilgili olarak, bu birçok işletim sistemi kurallarına uymak içindir. Dekompresyon başarısız olursa, işlemi gerçekleştiren programın kendisinden sonra temizliği garanti edilemez. Örneğin düşmüş olabilir. Bu nedenle, hedef dizinde kalan hiçbir dosya kalmaz ve işletim sistemi uygun gördüğü zaman geçici dosyayı elden çıkarır.


3
Doğru olsa da, bu dosyaların ilk önce neden geçici bir dizine sıkıştırıldığını ve sonra hedefine taşındığını açıklamıyor . Operasyon da orada gerçekleşiyor olabilir.
slhck

3
Sorunuzu daha iyi yansıtacak şekilde düzenlenmiş
Bir Cüce,

4
@Dante, bu doğru değil. Aynı bölümdeki bir dosyayı taşımak, dosya sistemindeki dosyanın dizinini yeni dizine değiştirir, hiçbir veriyi kopyalamaz ve yalnızca bir anı alır. Bana inanma Deneyin, bir çoklu GB dosyasını bir klasörden kesin ve başka bir klasöre yapıştırın; bir saniyeden daha az sürer. Aynı şeyi başka bir sürücüye veya bölüme deniyorlar. Dakika sürer.
Dour Yüksek Kemer

3
Re "uygun gördüğünde işletim sistemi geçici dosya imha edecek" Windows mu hiç bunu?
grawity

1
Bu tamamen yanlış cevap kaldırılmalıdır. 7zip, sürükle ve bırak işlemleri sırasında yalnızca geçici bir klasöre sıkıştırır ve bunun nedeni Windows kısıtlamalarıdır. Daha fazla bilgi için superuser.com/questions/197961/… adresine bakın .
dss539

-1

Sebep düşündüğünüzden daha basittir: Birçok program dosyaları% temp% 'a açar, hedef dosya sisteminde yeterli alan olmayabilir.

Artık, dosya sisteminizin yeterli alana sahip olduğunu ancak uygulamada olmadığını biliyor olabilirsiniz. Bu dosya sistemi işletim sistemi veya başka bir uygulama tarafından kullanılıyorsa ve açma sırasında doldurulursa ne olur?

Geliştiriciler,% temp% 'nin "sınırsız" alana sahip olduğu varsayımında bulunurken, hedefiniz bu değildir.


Tam değil; temp dizini kullanmak için bir sebep değil. Uygulama yapar (veya en azından olabilir) orada yeterli alan olup olmadığını biliyoruz. Birincisi, arşivleyici sıkıştırılmış dosyaların sıkıştırılmış olduklarını ve önceden tahsis ettiklerini ne kadar büyük olduklarını tam olarak bilirler ve daha sonra sıkıştırılan dosyaları doldurduklarında doldururlar ve ikincisi bir sürücüdeki boş alanı sorgulamak oldukça basittir. Ayrıca, eğer yeterli yer yoksa, o zaman yapabiliyorken sıkıştırmayı açar, sonra da alan bittiğinde bir hata yapar.
Synetech

Aslında, bu oldukça cevap. Bir uygulamanın hedef varış yerindeki alanı önceden tahsis edebilmesi, onun kendisine özel erişimi olacağı anlamına gelmez. Uygulama hedefi sorgulayabilir ve yeterli boşluğu olup olmadığını görebilir, ancak bu sorgu gerçekleşirken, boşluk ayırmadan önce başka bir uygulama bu boşluğun bir kısmını alabilir.
Keltari,

Bunun da ötesinde, bir kullanıcı geçici alanı bu kullanıcıya dosya sistemi düzeyinde bağlanır. Bir çökme veya başka bir başarısızlık varsa, başka bir kullanıcı temp dosyalarını göremedi. Hedef, bu tür güvenlik kısıtlamalarına sahip olmayabilir, bu nedenle başka bir dosya sisteminde takılı kalabilecek hassas verilerin bulunmaması daha güvenlidir.
Keltari,

Dediğim gibi, açma sırasında biterse, sadece bir hata mesajı verir. Geçici sürücüye ayıklamak nasıl düzeltir? Yeterli alan yoksa, dosyalar geçici sürücüye çıkarıldıktan sonra yeterli alan yoktur ve tüm bu CPU döngülerini boşa harcar ve temp sürücüsüne boşaltılan sürücü okuma / yazma işlemini boşuna bırakır. Cevabımda söylediğim gibi, 7-Zip kaynak kodunu incelemek veya WinRAR hakkında sormak için Alexander Roshal ile bağlantı kurmaktan çekinmeyin. Ben de söylediğim gibi hedef belirttikten veya bağlam menüsünü kullanabilirsiniz yanında, eğer, bu değil % temp% kullanın.
Synetech

-2

7-zip veya WinRAR geliştiricisi olmamak için buradaki yorumlarım tamamen spekülasyon. Her şey tamamlanıncaya kadar paketten çıkarmak için geçici alanın kullanılması, tüm dosyaların bozulmadığını doğrulamak için yardımcı olur (yani zip bozulmamış).

Arşivin başında dosyalar üzerinde çalışmaya başlayan, sıkıştırılmış büyük bir dosyayı açmaktan daha kötü bir şey yoktur; arşivin sonunda bir şeyin bozuk olduğunu bulmak için. Bu noktada her şeye olan güveninizi kaybedersiniz.

Son yorumum, bu davranışı 7-zip'ten gördüğümü hatırlamıyorum. Buraya sağ tıklayıp ayıkla dediğimde, genellikle açılmış dosyalara erişebiliyorum. Bir yerde ayar olmadığını iki kere kontrol ettiniz mi?


3. paragraf: Bu tür ayarları bulamıyorum ve çok fazla sayıda dosya var (4G) Şimdi çıkartıyorum, 4G'nin sonunda yavaş bir şekilde taşındığından eminim.

2. paragraf: sıkıştırılmış dosya zaten bozuksa "temp" ayıklamak hiçbir şeyi engellemez.

Dosyaları bozuk bir zipten görmenizi engeller. Mantık, her şey doğrulanana kadar hiçbir şey görememeniz. Ayar gittiği sürece, sana ne söyleyeceğime emin değilim. 7-zip'e Masaüstüme büyük bir tar dosyası çıkarmasını söylersem, dosyaları hemen görmeye başladım. Katran sıkıştırılmış bir format olmadığı için olabilir.
Kirk

> Mantık, her şey doğrulanana kadar hiçbir şey görememenizdir. Bu çok saçma. O zaman bazı dosyaları bozuk bir arşivden nasıl kurtarırsınız? Bunu tecrübe etmemenizin nedeni, dosyaları GUI'den sürüklemek yerine kabuk uzantısını kullanmanızdır.
Synetech
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.