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 .
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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?
źródło