Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2011.08.28;
Скачать: [xml.tar.bz2];

Вниз

Получения пути к папке "Мои документы" (CSIDL_PERSONAL)   Найти похожие ветки 

 
Добежал   (2008-12-24 18:15) [0]

Кое что смущает в хелпе:

CSIDL_PERSONAL (FOLDERID_Documents)
Version 6.0. The virtual folder that represents the My Documents desktop item. This is equivalent to CSIDL_MYDOCUMENTS.
Previous to Version 6.0. The file system directory used to physically store a user"s common repository of documents. A typical path is C:\Documents and Settings\username\My Documents. This should be distinguished from the virtual My Documents folder in the namespace. To access that virtual folder, use SHGetFolderLocation, which returns the ITEMIDLIST for the virtual location, or refer to the technique described in Managing the File System


Я так и не понял - а почему следут отличать путь к виртуальной папки от пути физического?

Имеет ли это значение, если данный путь используется для того, чтобы сделать Reset / Rewrite над путем:

[ПолученныйПуть]\Company\ProductName\blabla.ini ?


 
Добежал   (2008-12-24 18:18) [1]

А перед этим еще:

ForceDir([ПолученныйПуть]\Company\ProductName\)


 
DVM ©   (2008-12-24 22:48) [2]


> а почему следут отличать путь к виртуальной папки от пути
> физического?

потому что Мои документы виртуальная папка. Она размещена на рабочем столе, но ее там нет на самом деле.


 
DVM ©   (2008-12-24 22:52) [3]

Для получения пути используй SHGetSpecialFolderPath()


 
Добежал   (2008-12-25 11:35) [4]


> Для получения пути используй SHGetSpecialFolderPath()


это понятно, естественно, я ее и использую. Но там же надо передавать CSIDL. Вот мне нужно записать некоторые файлы в "Мои документы".

Откуда возникает вопрос. Как я понимаю, в Vista вернется путь к виртуальной папке, в системах ниже - к физической папке.

Вопрос - а почему их стоит различать? Есть ли какие-то особенности, если я хочу сделать:

ForceDir([ПолученныйПуть]\Company\ProductName\)

а потом Rewrite над [ПолученныйПуть]\Company\ProductName\blabla.ini ?

Есть ли какое различие в случаях если [ПолученныйПуть] виртуальный (Vista и выше) или реальный (ниже Vista)?


 
DVM ©   (2008-12-25 13:33) [5]


> Как я понимаю, в Vista вернется путь к виртуальной папке,
>  в системах ниже - к физической папке.

SHGetSpecialFolderPath по-моему везде возвращает реальную папку. Я в висте смотрел, но не помню.


> Вот мне нужно записать некоторые файлы в "Мои документы".

ну дык в чем проблема то:

result := GetSpecialFolderPath(CSIDL_PERSONAL);
if result = "" then result := GetSpecialFolderPath(CSIDL_MYDOCUMENTS);

function GetSpecialFolderPath(id: integer): string;
type
 TSHGetSpecialFolderPath = function(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall;
var
 Path: array[0..MAX_PATH] of char;
 SHGetSpecialFolderPath: TSHGetSpecialFolderPath;
begin
 result := "";
 ZeroMemory(@Path, SizeOf(Path));
 if (hShell32 > 0) then
   begin
     @SHGetSpecialFolderPath := GetProcAddress(hShell32, "SHGetSpecialFolderPathA");
     if Assigned(SHGetSpecialFolderPath) then
       begin
         SHGetSpecialFolderPath(0, Path, id, false);
         result := AddSlash(path);
       end;
   end;
end;


 
Добежал   (2008-12-25 13:52) [6]


> SHGetSpecialFolderPath по-моему везде возвращает реальную
> папку


а, ну вот это мне и нужно было. Ты уверен в этом? Просто в описании SHGetSpecialFolderPath -  http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx - это не понятно.

А в описании самих CSIDL - http://msdn.microsoft.com/en-us/library/bb762494.aspx - написано то, что я процитировал в первом сообщении. И непонятно к какой функции это относится.

Написано, что в системах до висты CSIDL_PERSONAL возвращает путь к физической папке, а в висте и выше - к виртуальной. Если же SHGetSpecialFolderPath с параметром CSIDL_PERSONAL возвращает путь ВСЕГДА к физической - имхо, это несколько противоречит описанию.


 
Добежал   (2008-12-25 13:54) [7]

DVM, кстати, если говорить про твой алгоритм - то есть замечания. Во-первых, SHGetSpecialFolderPath возвращает bool, а ты это не проверяешь. Хотя я понимаю, что в всегда и так работает ;)

Во-вторых, ты используешь какую-то AddSlash, судя по всему собственную функцию. По смыслу кода могу догадаться, что ты просто не знаешь про стандартную в VCL функцию: IncludeTrailingPathDelimiter


 
Добежал   (2008-12-25 14:00) [8]

что касается висты, то путь возвращается вида:

"C:\Users\[UserName]\Documents\"

Это виртуальный путь или реальный? Похож на реальный, но опять же в проводнике в списке папок эта папка Users видится не как Users, а как "Пользователи" и подпапка Documents называется "Документы".

Это проводник так русифицирует названия папок? Или C:\Users\[UserName]\Documents\ это виртуальная папка?


 
DVM ©   (2008-12-25 21:30) [9]


> Добежал   (25.12.08 13:54) [7]


> DVM, кстати, если говорить про твой алгоритм - то есть замечания.

весь этот сыр бор затеян только для того, что SHGetSpecialFolderPathA появилась в Win не сразу, а с какой то версии. Мне надо было чтобы везде работало.
Если функции не оказывалось я читал нужную инфу из реестра.


> Во-первых, SHGetSpecialFolderPath возвращает bool, а ты
> это не проверяешь

ну ты сам ответил почему :)


> Во-вторых, ты используешь какую-то AddSlash, судя по всему
> собственную функцию. По смыслу кода могу догадаться, что
> ты просто не знаешь про стандартную в VCL функцию: IncludeTrailingPathDelimiter

Да, сорри, забыл.

Кстати, если интересно, вот тут все вместе:

http://dvmuratov.narod.ru/files/SysFolders.zip


> "C:\Users\[UserName]\Documents\"
>
> Это виртуальный путь или реальный?

Реальный 100%.


> но опять же в проводнике в списке папок эта папка Users
> видится не как Users, а как "Пользователи" и подпапка Documents
> называется "Документы".

Ты не смотри в проводнике, смотри либо сам, либо другим файловым менеджером, а еще лучше посмотри загрузившись в другую ОС.


 
DVM ©   (2008-12-25 21:34) [10]


> По смыслу кода могу догадаться, что ты просто не знаешь
> про стандартную в VCL функцию: IncludeTrailingPathDelimiter

:) Знаю конечно. Просто захотелось сделать модуль минимально зависящий от SysUtils и прочего.


 
han_malign ©   (2008-12-26 14:36) [11]


> Есть ли какое различие в случаях если [ПолученныйПуть] виртуальный
(Vista и выше) или реальный (ниже Vista)?

> Реальный 100%.

- раньше можно было монтировать папку как диск, а в V ее можно монтировать по любому пути(фактичеcки псевдоним назначать)...
Например скрытая папка "Document and Settings" - насквозь виртальное перенапрвление на "Users"(для совместимости старых приложений пишущих по зашитым абсолютным путям)...
Самое веселое, что там есть рекурсивные переходы на  "Document and Settings" - наверно поэтому там запрещены права на просмотр, чтобы при построении дерева не навернуться...

cd "Document and Settings" - обломится
md \Users\[UserName]\Where-are-you
cd "Document and Settings\[UserName]\Where-are-you"


 
TIF ©   (2009-07-27 15:50) [12]

http://qc.embarcadero.com/wc/qcmain.aspx?d=75376


 
имя   (2009-08-13 20:53) [13]

Удалено модератором



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2011.08.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
2-1305295665
nicknolty
2011-05-13 18:07
2011.08.28
Непонятная кодировка


15-1305011498
Фокс Йовович
2011-05-10 11:11
2011.08.28
Аутстаффинг


11-1236688179
Dy1
2009-03-10 15:29
2011.08.28
вид DateTimePicker-а


15-1305059392
Юрий
2011-05-11 00:29
2011.08.28
С днем рождения ! 11 мая 2011 среда


15-1304672702
OW
2011-05-06 13:05
2011.08.28
С наступающим днем связи!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский