Названия специальных файлов

We use cookies. Read the Privacy and Cookie Policy

Названия специальных файлов

В 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());

}