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 7za
iş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 7za
yerine kullanmam önerildi .
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),
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.)
ReadNamesFromListFile()
dosyadaki işlevi kullandığındanListFileUtils.cpp
. '-a' bayrağı hiç mevcut değil, komut satırı daha çok7za a out.7z @in.txt