Перейти к содержимому

С как получить путь к загрузкам

  • автор:

Получение папки Загрузки в 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++. Но отдельные личности поражают своей находчивостью в поиске наихудшего подхода.
Не стоит делать так:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *