Названия специальных файлов
Названия специальных файлов
В Windows существует ряд специальных папок, в которых содержатся файлы определенной категории. Например, в папке Избранное содержатся ссылки на любимые сайты пользователя.
Проблема заключается в том, что в локализованных версиях Windows эти папки зачастую имеют разные названия. Так, в американской версии Windows упомянутая папка имеет название Favorites. И если ваша программа ссылается на файл, находящийся в специальной папке, то необходимо точно узнать, как называется эта папка на конкретном устройстве. Код проверки приведен в листинге 13.9.
Листинг 13.9
// Константы
/// <summary>
/// Папка, содержащая файлы и папки, которые появляются на
/// экране Сегодня
/// </summary>
const int CSIDL_DESKTOPDIRECTORY = 0x0010;
/// <summary>
/// Папка Избранное
/// </summary>
const int CSIDL_FAVORITES = 0x0006;
/// <summary>
/// Папка Мои документы
/// </summary>
const int CSIDL_PERSONAL = 0x0005;
/// <summary>
/// Папка Программы в папке Главное меню
/// (WindowsStart MenuPrograms)
/// </summary>
const int CSIDL_PROGRAMS = 0x0002;
/// <summary>
/// Папка Recent (содержит последние из открывавшихся
/// документов)
/// </summary>
const int CSIDL_RECENT = 0x0008;
/// <summary>
/// Папка Главное меню
/// (WindowsStart Menu)
/// </summary>
const int CSIDL_STARTMENU = 0x000b;
/// <summary>
/// Папка Автозагрузка для программ,
/// которые автоматически загружаются при запуске Windows
/// WindowsStartUp
/// </summary>
const int CSIDL_STARTUP = 0x0007;
/// <summary>
/// Папка, в которой хранятся шаблоны документов
/// </summary>
const int CSIDL_TEMPLATES = 0x0015;
/// <summary>
/// Функция получения имен специальных папок
/// </summary>
[DllImport("Coredll.dll")]
static extern int SHGetSpecialFolderPath
(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, int fCreate);
const int MAX_PATH = 260;
private void Form1_Load(object sender, EventArgs e) {
// Папка Избранное
StringBuilder strFavorites = new StringBuilder(MAX_PATH);
SHGetSpecialFolderPath(this.Handle, strFavorites, CSIDL_FAVORITES, 0);
MessageBox.Show("Избранное: " + strFavorites.ToString());
// Папка Программы
StringBuilder strPrograms = new StringBuilder(MAX_PATH);
SHGetSpecialFolderPath(this.Handle, strPrograms, CSIDL_PROGRAMS, 0);
MessageBox.Show("Программы: " + strPrograms.ToString());
// Мои документы
StringBuilder strMyDocs = new StringBuilder(MAX_PATH);
SHGetSpecialFolderPath(this.Handle, strMyDocs, CSIDL_PERSONAL, 0);
MessageBox.Show("Мои документы: " + strMyDocs.ToString());
}