Aniskin
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Inoz2000 Цитата: При перетаскивании временную папку использует не 7-Zip, а проводник. | Не совсем так. При операции перетаскивания источник передает приемнику специальный объект, реализующий интерфейс IDataObject. Через этот объект приемник пытается получить информацию о типе и местоположении перетаскиваемых данных. Т.е. к моменту передачи объекта источник уже должен знать местоположение передаваемых файлов. Для 7-Zip и любого другого архиватора нет иного пути, кроме как извлечь файлы во временную папку и указать в объекте эти самые временные файлы (на самом деле есть и более правильные варианты, но они требуют ряда нетривиальных действий). А самому Проводнику, принимающему файлы при операции перетаскивания, абсолютно все равно, где располагаются передаваемые файлы. Подытожу. При перетаскивании временную папку использует именно 7-Zip, а не Проводник. uShell Цитата: Specifying the FILE_ATTRIBUTE_TEMPORARY attribute causes file systems to avoid writing data back to mass storage if sufficient cache memory is available На всякий случай переведу (это из MSDN): если при создании файла задать атрибут "временный", то на диск он не запишется, если хватает места в системном кэше. Возможно, 7-Zip пользуется этой возможностью. | Наличие флага не обозначает, что файл не будет отображен при операции перечисления файлов. Т.е. даже если файл удерживается в системном кэше, то для системы это полностью прозрачно, и все файловые операции с ним происходят обычными вызовами и способами. Насколько я понимаю опцию Working folder - эта директория используется только при обновлении архива (добавление/удаление файлов внутри архива). Обновление архива происходит не путем модификации исходного архива, а путем создания нового файла, в который копируется не измененное содержимое старого. Предположу о причинах того, почему для остальных операций, требующих временных файлов, используется системная временная папка. Я думаю из-за того, что для иных операций нет возможности достоверно узнать, когда эти временные файлы можно удалить. Например, при операции перетаскивания 7-Zip в принципе не может узнать, когда созданные им временные файлы будут скопированы приемником. Или открытие файла из архива. Нет простого способа определить момент, когда пользователь закончил просмотр открытого файла и его можно удалить. Ну, а раз нельзя узнать, когда можно удалить временные файлы, то единственная разумная стратегия - не удалять их вовсе, оставив вопрос очистки временных файлов самой Windows. | Всего записей: 612 | Зарегистр. 09-01-2006 | Отправлено: 05:08 13-04-2020 | Исправлено: Aniskin, 10:18 13-04-2020 |
|