Получение папки Загрузки в C#? [дубликат]
Я сделал код, который будет искать каталоги и отображать файлы в списке.
Я даже попытался это:
I получите ошибку, хотя.
Ок, где написано UsersHunter Ну, когда люди получают мое программное обеспечение, есть имя не Хантер. так как мне сделать это, где он идет в папку загрузки любого пользователя?
6 ответов
метод WinAPI SHGetKnownFolderPath это единственный правильный способ получить пути к специальным папкам, включая личные и папку Загрузки.
есть и другие способы получить аналогичные результаты, которые выглядят многообещающими, но заканчиваются просто совершенно неправильными путями в конкретных системах (например, объединение или жесткое кодирование частей пути или злоупотребление старым ключом реестра). Причина этого изложена в моя статья CodeProject, что также дается полное решение. Он предоставляет класс упаковки с поддержкой извлечения всех известных 94 специальных папок и некоторых других лакомств.
для быстрого примера здесь я просто вставил сокращенную версию решения, имея возможность извлекать только личные специальные папки, такие как загрузки:
(полностью прокомментированная версия находится в статье CodeProject, связанной выше.)
пока это был просто неприятный стене код, поверхность нужно разобраться с этим довольно просто. Вот пример консольной программы, выводящей путь к папке Downloads.
Е. Г., просто позвоните KnownFolders.GetPath() С KnownFolder enum значение папки, путь к которой вы хотите запросить.
Пакет NuGet
если вы не хотите проходить через все это, просто установите мой пакет NuGet, который я недавно создал. Вот сайт проекта, а вот галерея ссылке (Примечание что использование различно и отполировано, пожалуйста советуйте с разделом использования на месте проекта для Больше информации).
самый простой способ сделать это:
Если вам нужно только получить путь к папке Загрузки текущего пользователя, вы можете использовать это:
UWP — получить путь к папке загрузки пользователя
Я долго искал и не нашел большой помощи через ресурсы MSDN и другие.
Моя затруднительная ситуация проста: моему приложению нужен базовый каталог для папки Downloads. Я знаю о классе DownloadsFolder , однако в настоящее время он мне не подходит.
Как узнать путь к папке загрузки текущего пользователя в универсальном приложении Windows?
4 ответа
Это то, что вам нужно?
C: \ Пользователи \ имя пользователя \ Загрузки
Используйте Windows.Storage.UserDataPaths , чтобы получить путь к папка загрузки пользователя.
- Этот метод представлен в сборке 16232, поэтому клиенты с RS3 (1709) или более поздней версии смогут его запустить.
- Вы не должны получать путь к папке загрузок с помощью LocalFolder, что может привести к неправильной папке, когда пользователь изменил для него местоположение по умолчанию.
DownloadsFolder для приложения теперь по умолчанию означает папку в каталоге загрузок пользователя, названную в честь имени приложения (на самом деле папка с именем приложения представляет собой просто ссылку на папку, названную в честь Package Family Name ) Чтобы получить имя папки, я использовал следующий прием (vb), чтобы сначала создать фиктивный файл в DownloadsFolder приложения UWP, затем использовать код .NET для получения имени каталога и, наконец, удалить фиктивный файл.
Как определить путь к папке загрузки Windows?
Но на компьютере коллег этой папки не существует, а его папка «Загрузки» находится в его папке «Мои документы». Мы оба на Windows 7*.
*Редактировать: на самом деле, оказывается, он запускал приложение не на своем компьютере, а на компьютере с Windows Server 2003.
папка «Загрузки» локализована. для неанглоязычных систем это не называется «Загрузки» . — Adrien Plisson
3 ответы
Windows не определяет CSIDL для папки «Загрузки» и недоступен через Environment.SpecialFolder перечисление.
Однако новая Vista Известная папка API определяет его с идентификатором FOLDERID_Downloads . Вероятно, самый простой способ получить фактическое значение — это P / invoke SHGetKnownFolderPath .
Обратите внимание, что P / invoke, указанный на pinvoke.net, неверен, так как он не использует набор символов Unicode. Также я воспользовался тем фактом, что этот API возвращает память, выделенную распределителем COM. Маршаллинг по умолчанию для P / invoke, приведенный выше, заключается в освобождении возвращенной памяти с помощью CoTaskMemFree что идеально подходит для наших нужд.
Будьте осторожны, это API Vista и выше, и не пытайтесь вызывать его на XP / 2003 или ниже.
ответ дан 06 окт ’11, 11:10
в Windows 7 папка «Загрузки» — это специальная папка, поэтому я могу переместить ее в любое конкретное место, которое захочу. Точно так же, как вы можете переместить папку Мои документы и т. Д. — Даан Тиммер
@ Даан Нет CSIDL для этого, так что в этом нет ничего особенного. — Дэвид Хеффернан
@Daan Но он определяется как известная папка. Я искал в старом списке CSIDL. — Дэвид Хеффернан
кажется правдой, но, тем не менее, известен как KNOWNFOLDERID: msdn.microsoft.com/en-us/library/dd378457(v=VS.85).aspx FOLDERID_Загрузки редактировать похоже, вы уже нашли / ответили на эту часть. — Даан Тиммер
@Daan Да, известные папки заменили CSIDL, который, насколько я понимаю, теперь устарел. — Дэвид Хеффернан
С как получить путь к загрузкам
Казалось бы — что может быть проще, чем работа с файлами в C++. Но отдельные личности поражают своей находчивостью в поиске наихудшего подхода.
Не стоит делать так: