Как разработчик, как я должен использовать специальные папки в Windows Vista (и Windows 7)? - PullRequest
26 голосов
/ 12 октября 2009

Где я должен сохранить данные, относящиеся к моей заявке? Где мне сохранить файлы конфигурации? Где мне сохранить временные файлы? Должен ли я сделать это в «Документах»? "Данные приложения"? Etc ...

Какова лучшая практика для сохранения данных на диск (я думаю, лучшая практика для специальных папок?!)?

Ответы [ 5 ]

28 голосов
/ 12 октября 2009

ApplicationData : все, что нужно вашему приложению в соответствии с данными «на пользователя» и не подпадает под другие категории. Стандартные конфигурационные файлы будут здесь.

CommonApplicationData : все, что не относится к данным «на пользователя».

LocalApplicationData : данные, относящиеся к пользователю и не находящиеся в роуминге. Например, все, что вы хотите УБЕДИТЬ, что оно хранится только на этом компьютере (например, коды активации компьютера, часто также кеширование / временные данные). Стандартные временные файлы будут идти сюда.

MyDocuments : пользовательские данные, которые пользователь фактически определил бы как «распознаваемые отдельные документы».

Если вам не важно имя файла, вы также можете использовать API временного файла для создания временного файла в каталоге temp. Вы не должны делать это вручную. Например, в .NET вы можете использовать Path.GetTempFileName() для этой цели.

10 голосов
/ 12 октября 2009

С Программа логотипа клиентского программного обеспечения Windows 7 :

  • По умолчанию приложения должны быть установлены в папку Program Files. Пользовательские данные или данные приложения никогда не должны храниться в этом месте из-за разрешений безопасности % ProgramFiles% для собственных 32-разрядных и 64-разрядных приложений и% ProgramFiles (x86)% для 32-разрядных приложений, работающих на x64, соответственно перезаписывают данные и настройки друг друга.
  • Все данные приложения, которые должны быть доступны пользователям на компьютере, должны храниться в ProgramData
  • Все данные приложения, предназначенные исключительно для конкретного пользователя и не подлежащие передаче другим пользователям компьютера, должны храниться в папке Users \\ AppData
  • Никогда не пишите напрямую в каталог и / или подкаталоги Windows. Используйте правильные методы для установки файлов, таких как шрифты или драйверы
  • В установках «на машину» пользовательские данные должны записываться при первом запуске, а не во время установки. Это потому, что нет правильного местоположения пользователя для хранения данных во время установки. Попытки приложения изменить поведение ассоциации по умолчанию на уровне компьютера после установки будут безуспешными. Вместо этого значения по умолчанию должны запрашиваться на уровне пользователя, что не позволяет нескольким пользователям перезаписывать значения по умолчанию друг друга.
1 голос
/ 12 октября 2009

В общем, лучшие практики Windows должны следовать соответствующим переменным среды. Данные конфигурации, которые вы хотите использовать, должны быть в% APPDATA%, а временные файлы - в% TEMP%.

Преимущество этого состоит в том, что вы не будете ужасно ломаться, если Windows что-то меняет, и уважаете странные конфигурации, которые могут иметь люди.

Кроме того, я согласен с другими ответами, что «Документы» должны быть только для данных, созданных пользователем, и только после запроса.

1 голос
/ 12 октября 2009

AppData должна иметь автоматическую конфигурацию и профили, документы должны быть только сохраненными пользователем файлами. Я хотел бы поместить все, что может быть полезно в нескольких системах в AppData / Roaming, и все остальное (для конкретной машины) в AppData / Local или LocalLow. Для временных файлов используйте каталог Temp.

0 голосов
/ 22 октября 2009

Кроме того, вы должны использовать SHGetFolderPath или SHGetKnownFolderPath (в Vista +), чтобы получить пути. Это предоставит вам правильное местоположение в текущей системе независимо от версии или языка текущей установки. Никогда не кодируйте жестко какой-либо путь, который вы используете.

...