Dlaczego 7-zip / WinRAR rozpakowuje pliki do „temp” przed przeniesieniem ich do miejsca docelowego?

50

Dlaczego 7-zip / WinRAR rozpakowuje pliki do „temp” przed przeniesieniem ich do miejsca docelowego?

Nie widzę żadnej przewagi nad rozpakowaniem bezpośrednio do miejsca docelowego. Jest to naprawdę irytujące, szczególnie w przypadku dużych plików (tak jak teraz!).


Edytować:

Proszę wyjaśnić, dlaczego nie są one wykonywane na miejscu .

Stevoisiak
źródło
3
Jeśli określisz `` jako folder tymczasowy w WinRAR, powinien on rozpakować bezpośrednio do miejsca docelowego.

Odpowiedzi:

82

Jak dokładnie wyodrębniasz pliki? Czy używasz wiersza polecenia lub GUI? Przeciągasz pliki lub wybierasz je i używasz funkcji wyodrębniania? Czy używasz menu kontekstowego rozszerzenia powłoki?

Jeśli wejdziesz do folderu docelowego, a następnie wybierzesz funkcję wyodrębnienia lub użyjesz rozszerzenia powłoki, wówczas nie rozpakują się najpierw do folderu tymczasowego, lecz wyodrębnią bezpośrednio do miejsca docelowego.

Jeśli wybierzesz pliki w interfejsie użytkownika i przeciągniesz je do folderu docelowego, zostanie ono rozpakowane do folderu tymczasowego.

Powodem jest sposób wyboru miejsca docelowego. Jeśli wejdziesz do folderu docelowego lub użyjesz pozycji menu kontekstowego, wówczas program będzie wiedział dokładnie, dokąd musi się rozpakować. Jeśli jednak po prostu przeciągniesz pliki, to ze względu na działanie funkcji przeciągania i upuszczania w OLE program nie wie, gdzie jest folder docelowy. Innymi słowy, jest to Explorerktóry otrzymuje folder docelowy, a nie program do archiwizacji. W rezultacie program nie może wiedzieć, gdzie je wyodrębnić, dlatego po prostu rozpakowuje je do folderu tymczasowego, a następnie Eksplorator przenosi je po zakończeniu. Możesz to wyraźnie zobaczyć, wyodrębniając duży plik przy użyciu obu metod. Gdy przeciągniesz go do folderu, zostanie on wyodrębniony, a następnie zobaczysz standardowe okno dialogowe Eksploratora operacji przenoszenia pliku do folderu. Jeśli określisz folder i klikniesz Wyodrębnij, zostanie on wyodrębniony i dalsze przetwarzanie nie zostanie wykonane.

Zapoznaj się z kodem źródłowym 7-Zip, aby zobaczyć, jak obsługiwana jest lokalizacja ekstrakcji.


Nauczyłem się tego na własnej skórze kilka lat temu, kiedy chciałem zaimplementować funkcję przeciągnij i upuść w pisanym przeze mnie programie.

Synetech
źródło
7
Absolutnie genialne - dzięki za to! To zadziwiło mnie od lat, ale nigdy nie poświęciłem czasu na odnalezienie „co” i dlaczego ”. W dziwnych chwilach, gdy mój folder C: temp jest wypełniony do whazoo, przeglądam opcje Winrar, aby znaleźć miejsce trzeba ustawić, aby najpierw rozpakować do folderu tymczasowego na C: Ale niestety nie mogę go znaleźć. Nigdy nie połączyłem korelacji między tymi dwiema metodami, a teraz doceniam ujrzenie światła :) Dzięki!
Coldblackice,
2
Jedną z rzeczy, które tutaj są złe, jest to, że Explorer nie przenosi pliku, a raczej go kopiuje . Co jest naprawdę irytujące, ponieważ przenoszenie jest bardzo szybkie (z wyjątkiem przenoszenia z partycji na partycję) i powinno być idealnym wyborem (nie marnuje miejsca), ale idioci w Microsoft uważali, że dobrym pomysłem jest kopiowanie z folderu tymczasowego a następnie po prostu zostaw dane folderu tymczasowego. Wyodrębnienie ogromnego archiwum zajmie nie tylko dwa razy więcej miejsca, ale także zajmie prawie dwa razy więcej!
ADTC
Prawdopodobnie mieli ku temu dobry powód i mogło to wynikać z pewnego rodzaju ograniczeń systemów i / lub DDE, na których został oparty, kiedy po raz pierwszy zaprojektowali OLE, w czasach Windows 3; ograniczenie, które może, ale nie musi mieć zastosowanie dzisiaj.
Synetech,
1
Tak, jest niepotrzebnie, szczególnie na maszynie wirtualnej o ograniczonej przestrzeni. Użycie polecenia „wypakuj” rozpakowuje archiwum RAR o pojemności 8 GB z ponad 6000 plików w około 1 minutę. Jeśli jednak przeciągniesz foldery, rozpakowanie do katalogu tymczasowego zajmuje tyle samo czasu, ale dodatkowo zamraża okno docelowe, a następnie KOPIUJE pliki przez ponad 15 minut z prędkością zaledwie 3 Mb / s. Szczególnie powolne jest kopiowanie pliku na tym samym dysku (prawdopodobnie z powodu bazowego wirtualnego systemu plików), nawet jeśli mogę skopiować plik z innej maszyny wirtualnej na tę maszynę przez sieć z prędkością setek MB / s.
Triynko
1
Wydaje mi się, że potencjalnym obejściem byłoby utworzenie pliku 0-bajtowego z nazwą GUID, tzn. Praktycznie niemożliwe jest wystąpienie jako duplikat nazwy pliku. Następnie monitoruj uchwyty pliku explorer.exe, aby zobaczyć, gdzie kopiuje plik. Na koniec rozpakuj archiwum do miejsca docelowego.
Zv_oDD,
1

Dokonuje się tego, aby wymagania dotyczące pamięci do dekompresji były ograniczone do minimum.

Gdyby nie korzystali z systemu plików, dekompresja nastąpiłaby w pamięci. W warunkach niskiego poziomu pamięci lub w przypadku dużych skompresowanych plików prędzej czy później wyczerpuje to dostępną pamięć i rozpoczyna proces stronicowania pamięci.

W takich okolicznościach stronicowanie byłoby znacznie wolniejsze niż użycie systemu plików, ponieważ plik jest nadal dekompresowany (a pliki stron są dodawane), ale także dlatego, że podczas dekompresji pliku jest sprawdzany pod kątem błędów i jako taki wiele operacji odczytu / zapisu. Najgorsze, co może się stać z plikiem strony.

EDYCJA: Jeśli chodzi o korzystanie z katalogu tymczasowego, jest to zgodne z wieloma wytycznymi systemu operacyjnego. Jeśli dekompresja nie powiedzie się, nie ma gwarancji, że program wykonujący operację wyczyści się po sobie. Mogło na przykład ulec awarii. W związku z tym w katalogu docelowym nie pozostaje żaden plik resztkowy, a system operacyjny usunie plik tymczasowy, jeśli uzna to za właściwe.

Krasnolud
źródło
3
Chociaż jest to prawda, nie wyjaśnia to, dlaczego pliki są najpierw kompresowane do katalogu tymczasowego, a następnie przenoszone do katalogu docelowego. Operacja może również mieć miejsce właśnie tam.
slhck
3
Edytowane, aby lepiej odzwierciedlić twoje pytanie
Dwarf
4
@Dante, to nieprawda. Przeniesienie pliku na tę samą partycję po prostu zmienia indeks pliku w systemie plików do nowego katalogu, nie kopiuje żadnych danych i zajmuje tylko chwilę. Nie wierzysz mi? Spróbuj, wytnij plik o rozmiarze wielu GB z jednego folderu i wklej go do innego folderu; zajmuje mniej niż sekundę. Próbują tego samego na innym dysku lub partycji. Zajmuje minuty.
Dour High Arch
3
Re „system operacyjny usunie plik tymczasowy, gdy uzna to za właściwe”: czy system Windows kiedykolwiek to robi?
grawity
1
Tę całkowicie fałszywą odpowiedź należy usunąć. 7zip dekompresuje tylko do folderu tymczasowego podczas operacji przeciągania i upuszczania, a to z powodu ograniczeń systemu Windows. Aby uzyskać więcej informacji, zobacz superuser.com/questions/197961/ ...
dss539,
-1

Powód jest prostszy niż myślisz: wiele programów rozpakowuje pliki do% temp%, ponieważ docelowy system plików może nie mieć wystarczającej ilości miejsca.

Teraz możesz wiedzieć, że twój system plików może mieć wystarczająco dużo miejsca, jednak aplikacja tego nie ma. Co jeśli ten system plików jest używany przez system operacyjny lub inną aplikację i zostanie zapełniony podczas dekompresji?

Programiści przyjmują założenie, że% temp% ma „nieograniczoną” przestrzeń, podczas gdy miejsce docelowe nie.

Keltari
źródło
Nie do końca; nie jest to powód do korzystania z katalogu tymczasowego. Aplikacja robi (lub przynajmniej można) wie, czy jest wystarczająco dużo miejsca, czy nie. Po pierwsze, archiwizator dokładnie wie, jak duże są skompresowane pliki, gdy są one dekompresowane i może je wcześniej przydzielić, a następnie wypełnić je podczas dekompresji, a po drugie, dość proste jest zapytanie o wolne miejsce na dysku. Poza tym, jeśli nie ma wystarczającej ilości miejsca, to po prostu dekompresuje się, gdy może, a następnie generuje błąd, gdy zabraknie miejsca.
Synetech
Właściwie to jest całkiem odpowiedź. To, że aplikacja może wstępnie przydzielić miejsce w docelowym miejscu docelowym, nie oznacza, że ​​będzie miała do niej wyłączny dostęp. Aplikacja może wykonać zapytanie do miejsca docelowego i sprawdzić, czy ma wystarczającą ilość miejsca, ale podczas wykonywania tego zapytania, zanim będzie w stanie przydzielić miejsce, inna aplikacja może zająć część tego miejsca.
Keltari
Ponadto przestrzeń tymczasowa użytkowników jest powiązana z tym użytkownikiem na poziomie systemu plików. W przypadku awarii lub innej awarii inny użytkownik nie widział plików tymczasowych. Miejsce docelowe może nie mieć takich ograniczeń bezpieczeństwa, więc bezpieczniej jest nie mieć wrażliwych danych zawieszonych w innym systemie plików.
Keltari
Jak powiedziałem, jeśli skończy się podczas dekompresji, po prostu wyświetli komunikat o błędzie. Jak naprawiłoby to wypakowanie na dysk tymczasowy? Jeśli nie ma wystarczającej ilości miejsca, oznacza to, że nie ma wystarczającej ilości miejsca po wyodrębnieniu plików na dysk tymczasowy i marnuje wszystkie te cykle procesora, a dysk odczytuje / zapisuje wyodrębnianie na dysk tymczasowy za darmo. Tak jak powiedziałem w mojej odpowiedzi, możesz przeczytać kod źródłowy 7-Zip lub skontaktować się z Alexandrem Roshal, aby zapytać go o WinRAR. Poza tym, jak już powiedziałem, jeśli określisz cel lub użyjesz menu kontekstowego, nie użyje on% temp%.
Synetech
-2

Nie będąc deweloperem 7-zip ani programistą WinRAR, moje komentarze tutaj są czysto spekulacyjne. To powiedziawszy, używanie przestrzeni tymczasowej do rozpakowywania, aż wszystko będzie kompletne, pomaga sprawdzić, czy wszystkie pliki są nienaruszone (tj. Czy zip nie jest uszkodzony).

Nie ma nic gorszego niż rozpakowanie dużego skompresowanego pliku, który rozpoczął pracę nad plikami na początku archiwum; tylko po to, aby dowiedzieć się, że coś jest uszkodzone na końcu archiwum. W tym momencie tracisz zaufanie do wszystkiego.

Mój ostatni komentarz jest taki, że nie pamiętam, aby widziałem to zachowanie z 7-zip. Kiedy klikam prawym przyciskiem myszy i mówię tutaj wypakuj, ogólnie mam dostęp do plików podczas ich rozpakowywania. Czy dwukrotnie sprawdziłeś, czy gdzieś nie jest to ustawienie?

Kościół
źródło
Trzeci akapit: Nie mogę znaleźć takich ustawień, a właśnie wyodrębniłem dużą grupę plików (4G), jestem prawie pewien, że w końcu wszystkie 4G zostały przeniesione powoli.
Drugi akapit: wypakuj do „temp” niczego nie zapobiega, jeśli spakowany plik jest już uszkodzony.
Zapobiega wyświetlaniu plików z uszkodzonego pliku zip. Logika jest taka, że ​​nic nie zobaczysz, dopóki wszystko nie zostanie zweryfikowane. Jeśli chodzi o ustawienie, nie jestem pewien, co ci powiedzieć. Jeśli każę 7-zip wyodrębnić duży plik tar na mój pulpit, natychmiast zaczynam widzieć pliki. Może tak być, ponieważ tar nie jest formatem skompresowanym.
Kirk,
> Logika jest taka, że ​​nic nie zobaczysz, dopóki wszystko nie zostanie zweryfikowane. To absurdalne. Jak zatem odzyskałeś niektóre pliki z uszkodzonego archiwum? Powodem tego nie jest to, że użyłeś rozszerzenia powłoki zamiast przeciągania plików z GUI.
Synetech