#python #windows
#python #Windows
Вопрос:
В настоящее время я пишу сценарий python для проекта, но для продолжения работы с проектом мне нужно знать, куда будут отправляться все загруженные файлы / программы [exe] в Windows.
Я знаю, что он перейдет в папку загрузки пользователя, если пользователь не изменил местоположение по умолчанию для загруженной папки или не сохранил его в определенном месте, но я спрашиваю, есть ли способ найти все загруженные файлы независимо от того, где они находятся.сохраняются ли?
Любая помощь будет большой помощью, я погуглил, но не нашел ответа, который искал, поэтому надеялся, что кто-нибудь здесь сможет дать некоторое представление.
Ответ №1:
Тот факт, что файл был загружен один раз за раз, — это не то, что вы можете наблюдать из файловой системы. Другими словами, нет, вы не можете этого сделать.
Однако NTFS сохраняет тот факт, что файл был ТОЛЬКО что загружен в альтернативный поток данных (ADS), который вы можете прочитать. Таким образом Windows предупреждает вас о том, что файл был загружен из Интернета и может быть опасным.
Проблема в том, что если файл когда-либо открывается, и пользователь говорит, что файл безопасен, эти данные удаляются. Вы не можете знать, что файл был загружен ранее, только если он был загружен и никогда не открывался.
Если вашему скрипту на python необходимо воздействовать на некоторые другие файлы, вы должны спросить пользователя, где находятся файлы, либо в командной строке, либо в интерактивном режиме.
Комментарии:
1. Большое вам спасибо за ваш ответ, но я не думаю, что это невозможно сделать, потому что, например, хороший антивирус автоматически обнаружит момент загрузки файла / программы, а затем сообщит нам, является ли он вредоносным или нет. Пожалуйста, поправьте, если я ошибаюсь!
2. Антивирус отслеживает создание файла любым способом, ему все равно, был ли он загружен или нет. Раньше мы заражались вирусами при копировании файлов с гибких дисков 🙂
3. Большое вам спасибо за вашу помощь. Я думаю, что мне удалось найти то, что я искал. Теперь мне просто нужно углубиться, и я доберусь туда, куда я хочу попасть наверняка. Еще раз, большое вам спасибо за всю помощь!
Ответ №2:
Есть несколько вещей, которые следует учитывать.
- Вы всегда можете просканировать весь диск, чтобы найти последние файлы. Это медленно, но возможно. Это ваш наихудший сценарий.
- С помощью расширения вы можете использовать файловый индекс Windows — поиск Windows. Это ускорит поиск и позволит сортировать по дате, но по-прежнему является более быстрой версией первого варианта. Другими словами, это не говорит вам ничего нового.
- Чтобы получить папку загрузок текущего пользователя по умолчанию, рассмотрите возможность использования переменных среды Windows, таких как:
%USERPROFILE%downloads
. Это может значительно упростить программный поиск папки текущего пользователя без необходимости знать его имя пользователя. - (Отредактировано) Я заявил, что нет способа отследить источник, но, как указано в другом ответе, можно определить, был ли он загружен с помощью рекламы. В частности,
Zone.Identifier
поток означает, что файл поступил из другой «зоны безопасности», то есть не с этого компьютера. Кроме этого, он не предоставляет подробных сведений о том, откуда он взялся, но, возможно, это не важно для вашего варианта использования.
Комментарии:
1. Большое вам спасибо, это информация, которая наверняка будет полезна в долгосрочной перспективе.
2. Не предполагайте расположение каталога загрузок по умолчанию. Текущий путь должен быть запрошен через
SHGetKnownFolderPath
withFOLDERID_Downloads
, который можно вызвать через ctypes или PyWin32 (через COM). В противном случае вы также можете проверить раздел реестра «HKCU SOFTWARE Microsoft Windows CurrentVersion Explorer User Shell Folders» на наличие значения с именем «Downloads» или имени GUID «{374DE290-123F-4565-9164- 39C4925E467B}» (для меня в настоящее время он установлен с помощьюИмя GUID).3. Как я уже сказал, используйте переменные среды, такие как . По сути, это просто еще одна переменная, ни одному из вариантов нельзя доверять — как указано в вопросе, op знает, что пользователь может использовать «сохранить как» при загрузке. Пользовательская папка была соглашением в течение очень долгого времени в Windows, это довольно простой в использовании и относительно надежный метод поиска местоположения по умолчанию.
4. Папки оболочки пользователя в реестре не являются переменными среды. В организациях нередко перенаправлять папки оболочки пользователя из их расположения по умолчанию в профиле пользователя на UNC-путь или сетевой диск, чтобы минимизировать размер перемещаемых профилей, которые необходимо синхронизировать при входе в систему. Переменными среды для известных папок, на которые можно положиться, являются фиксированные системные переменные, такие как «SystemRoot», «ProgramFiles», «ProgramData», «PUBLIC», и надежные пользовательские переменные, такие как «USERPROFILE», «APPDATA» и «LOCALAPPDATA», но не для перемещаемых папок оболочки пользователя.