Получить путь к папке "Мои документы" в delphi
я использую следующий код для получения специальных каталогов
uses
ActiveX, ShlObj;
{...}
procedure TForm1.Button1Click(Sender: TObject);
// Replace CSIDL_HISTORY with the constants below
var
Allocator: IMalloc;
SpecialDir: PItemIdList;
FBuf: array[0..MAX_PATH] of Char;
PerDir: string;
begin
if SHGetMalloc(Allocator) = NOERROR then
begin
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir);
SHGetPathFromIDList(SpecialDir, @FBuf[0]);
Allocator.Free(SpecialDir);
ShowMessage(string(FBuf));
end;
end;
И теперь я хочу получить путь к моим документам
поэтому я использую
mydocfolderpath: = string (FBuf) + '\ Documents', и я думаю, что он работает хорошо
но я сомневаюсь, что это путь mydocuments на всех ПК с Windows (personalfolder/documents), который пользователь может изменить эту структуру и сделать мою папку с документами anywhare else (например: c:\documents)
если пользователь меняет путь, дайте мне правильный путь, и мне нравится знать, что такое имя папки mydocuments (Мои документы или документы)
Ответы
Ответ 1
CSIDL_PERSONAL есть папка Мои документы:
CSIDL_PERSONAL FOLDERID_Documents Версия 6.0. Виртуальная папка, представляет рабочий стол My Documents пункт. Это эквивалентно CSIDL_MYDOCUMENTS.
Предыдущая версия 6.0. Файл системный каталог, используемый для физического хранить общий репозиторий пользователя документы. Типичный путь C:\Documents and Settings\имя_пользователя\My Документы. Это должно быть отличается от виртуального My Документы в пространстве имен. к доступ к этой виртуальной папке, используйте SHGetFolderLocation, которая возвращает ITEMIDLIST для виртуального расположения, или обратитесь к методу, описанному в Управление файловой системой. Управление файловой системой.
Смотрите: http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx для списка и описания всех доступных констант CSIDL
Ответ 2
Если вы используете последнюю версию Delphi (XE5 или выше), вы можете использовать классы агностики новой платформы. В основном System.IOUtils
System.IOUtils
в uses
, затем используйте TPath.GetDocumentsPath
, чтобы получить папку с документами.
Просмотрите Doc Wiki