Piszę aplikację, która działa ze zdjęciami satelitarnymi, a mój szef poprosił mnie, abym przejrzał niektóre aplikacje komercyjne i zobaczył, jak się zachowują. Znalazłem dziwne zachowanie, a potem, gdy szukałem, znalazłem je również w innych standardowych aplikacjach.
Programy te najpierw zapisują do folderu tymczasowego, a następnie kopiują go do zamierzonego miejsca docelowego.
Przykład: 7zip najpierw rozpakowuje do folderu tymczasowego, a następnie kopiuje wyodrębnione dane do lokalizacji, w której poprosił o wyodrębnienie danych.
Widzę kilka problemów z tym podejściem:
Folder tymczasowy może nie mieć wystarczającej ilości miejsca, podczas gdy docelowa lokalizacja może mieć tyle miejsca.
Jeśli jest to duży plik, operacja kopiowania może zająć nie bez znaczenia.
Dużo o tym myślałem, ale nie widziałem ani jednego pozytywnego punktu, aby to zrobić. Czy coś mi umknęło, czy też jest to naprawdę korzystne?
źródło
Odpowiedzi:
Kilka powodów, o których mogę myśleć:
TL; DR - sprowadza się głównie do atomowości, to znaczy, że chcesz, aby (w ostatecznej lokalizacji) plik był kompletny lub w ogóle go nie było w danym momencie.
źródło
Wydaje się, że jest to problem w systemie Windows, bardziej konkretnie związany ze sposobem zarządzania przeciąganiem.
Twórcy WinSCP klienta opracowali własne rozszerzenie powłoki, które zastępują to zachowanie Przeciągnij i pozwala natychmiast upuszczenie pliku do prawego folderu. Wyjaśniają sztuczkę w swojej dokumentacji i, co ciekawsze, jaki jest problem i jak go rozwiązali.
Oto interesująca część:
Również specjalnie dla 7Zip: użytkownik ray023 odpowiada na to pytanie w SuperUser Stack Pytania i odpowiedzi: https://superuser.com/a/422463
Zasadniczo, jeśli zamiast przeciągania pliku skorzystasz z metody „wyodrębnij tutaj” dostępnej w bitach 7-ZIP i Winrar, pliki zostaną bezpośrednio rozpakowane do odpowiedniego katalogu.
źródło
Jeśli musisz wykonać jakiekolwiek przetwarzanie danych do pliku (dekodować / przekonwertować itp.), Lepiej użyć pliku tymczasowego i po zakończeniu, i tylko po zakończeniu, przenieś wynik do ostatecznego miejsca docelowego.
Korzyści:
Nie widzę prawdziwych korzyści z pisania bezpośrednio do miejsca docelowego podczas przetwarzania danych.
źródło