7-Farklı klasörlerdeki birçok dosya zip?


4

Tek bir 7-Zip arşivi kullanılarak farklı klasörlerden farklı isimlerdeki çok sayıda dosya eklemek istiyorum 7za.exe. Bu basit olmalı, ama büyük bir acı olduğu ortaya çıktı.

Paths ( 7za a out.7z @list.txt) öğesini içeren bir dosya oluşturdum , ancak bir kez çok fazla (~ 100) dosya bulunduğunda, başarısız oluyor. Görünüşe göre argüman dosyasının içeriği komut satırı arabelleğine itildi [ Düzenle : Bu muhtemelen benim açımdan yanlış bir şeydi, ya da nedeni değildi ], çok küçük (eklenecek dosya sayısı fazla bir milyon).

Dosyaları birer birer ekleyerek işlemi bölmek 7zaişe yaraması nedeniyle mümkün değildir : Bir sonraki dosyayı eklerken, arşivin bir kopyasını oluşturur, dosyayı kopyaya ekler ve sonunda orijinali değiştirir. Arşiv birkaç 100 MB boyutunda olduğunda bu oldukça yavaş olur.

Şimdiye kadar bir döngü içinde her zaman bir düzine dosya ekleyerek iki yaklaşımın bir kombinasyonunu kullanıyorum, ancak güvenilmez bir kesmek ve hala çok yavaş. Bunu yapmanın daha iyi bir yolu var mı?

7-Zip sarmalayıcı DLL'lerini kullanmaya çalıştım (Ben bir C # programcısıyım), ancak hiçbiri güvenilir bir şekilde çalışmadı ve tekrar tekrar 7zayerine kullanmam önerildi .


'-a komut satırı arabelleğine itiliyor' .. bu iddianın sahte olduğuna inanmama eğilimindeyim. özellikle kod ReadNamesFromListFile()dosyadaki işlevi kullandığından ListFileUtils.cpp. '-a' bayrağı hiç mevcut değil, komut satırı daha çok 7za a out.7z @in.txt
benzemelidir

Her birinde 100 (boş) metin dosyası bulunan 50 klasör oluşturdum. dosyaların bir listesini oluşturun. bu listeyi besledim 7za. bir cazibe gibi çalıştı. dosyaların nasıl düzenlendiğini, dosyaların listesini oluşturmak konusunda daha fazla bilgi sağlamak için çalışma dizini, vs vs olduğu (yol bilge),
akira

Tüm bu dosyaları yeni bir klasöre kopyalamak için bir komut çalıştırabilir, daha sonra sıkıştırılmış hale getirebilir misiniz veya dosya yapısını korumanız mı gerekiyor?
SaintWacko

@akira: Evet, benim hatam, soru metnini güncelledim.
mafu

@akira: Bunu daha çok sayıda dosya ve daha uzun yollarla deneyebilir misiniz? Kullandığım komut 7za/7za.exe a "C:\foo/0000.7z" -mx1 -w"C:\foo/" -- "C:\temp\list.tmp". Çalışma dizini c: \ input'tur ve list.tmp içindeki tüm yollar bu dizinde bulunur. (Gerçek dizin adları daha uzun ve daha derin.)
mafu

Yanıtlar:


4

Aptalca bir şekilde soruna yaklaşıyorum, gerçek sebebi bulmam çok zaman aldı. Ben düşünmedim bir yerde 7zip bir hata nedeniyle .

4.57 numaralı sürümde bir liste dosyası kullanılıyorsa yanlış bir hata bildirimi var. Bir liste dosyası, farklı dizinlerdeki aynı adlandırılmış dosyalara işaret eden mutlak yolların bazı satırlarını (göreceli yollar çalışıyor gibi görünüyor) içeriyorsa, bir 'Çoğaltılmış dosya adı' hatası ortaya çıkar.

Sorunu, aynı klasördeki iki dosyayı, farklı dizinlerdeki liste dizinindeki mutlak yollarıyla kullanarak yeniden oluşturabildim.

Orijinal soruda, bir kerede yalnızca 1 veya birkaç dosya eklerken, liste dosyası (yanlışlıkla) böyle bir "yinelenen dosya adı" içermediğinden, çalıştı (arşiv dosyasının kendisi sorunsuz bir şekilde oluşturuldu).

Resmen, bir özellik denir. Bundan emin değilim, ancak belgelenmemesi nedeniyle beni ve diğerlerini şaşırtmaktan kuşkusuz bir şeydi.


öyleyse listeyi tekilleştirmek aslında sorunu çözdü mü?
akira 7:12

Aslında bu mantıklı geliyor. 7zip aslında dosya yolunu düşündüğünüz gibi kaydetmez. Sadece dosyaları depolar ve başka bir yerde her dosyanın yolunu izler. Bu, aynı ada sahip iki dosyanız varsa, farklı yolları olsa bile, yine de aynı iki dosyayı arşive koymaya çalışırken görecektir.
SaintWacko

@ akira: Evet, öyle - "yinelenen" dosyaların birer birer eklenmesi gerekiyor.
mafu 09:

@SaintWacko: Açıklamak gerekirse, mevcut durumda 7z, dosyanın yolunu arşivde saklar. Bu nedenle aynı adı taşıyan dosyaları birer birer eklemek mümkündür. Ancak liste dosyasında, yalnızca adları denetler, yolları değil ve dolayısıyla başarısız olur.
mafu 09:

@mafutrct - Gerçekten mi? Benim hatam, yanlış bir şeyler okumuş olmalıyım. Beni düzelttiğin için teşekkürler :)
SaintWacko 10:12
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.