2009-06-25 3 views
1

ShGetFolderPath을 사용하여 사용자 프로필 폴더의 경로를 확인하려고합니다.CSIDL_PROFILES에 #define을 찾을 수없는 이유는 무엇입니까?

CSIDL_PROFILES (0x003e)

버전 6.0 : 문서는 CSIDL_PROFILES이 폴더를 정의한다고. 사용자 프로파일 폴더가 들어있는 파일 시스템 디렉토리입니다. 일반적인 경로는 C : \ Documents and Settings입니다.

Visual Studio 2005 SP1을 사용하고 있는데 플랫폼 SDK 포함 파일에 상수 CSIDL_PROFILES의 정의가 없습니다. Platform SDK의 새 버전이 필요합니까?

그래서 나는 심볼 대신에 ID 0x3e를 사용하여 좀 더 실험 해 보았습니다. 그러나 0x3e는 CSIDL_ * 인수를 허용하는 셸 함수의 유효한 인수가 아닙니다 (잘못된 인수 오류가 반환 됨).

그래서이 기호를 언급하면 ​​CSIDL_PROFILES가 유효한 인수가 아니며 제목의 MSDN 페이지 중 일부가 올바르지 않다고 생각됩니다. 나는 Win32/MSDN 문서 작업에서 수년 동안 비슷한 상황을 기억할 수 없다고 말해야한다.

+0

CSIDL_PROFILES를 참조하는 MSDN 페이지에 대한 링크를 제공 할 수 있습니까? 나는 하나를 찾을 수 없었다 ... – Roddy

+0

@Roddy, 나는 msdn.com에서 찾지 못했고, 내가 찾은 참조는 VS2005와 함께 배송되는 로컬 MSDN 도움말에 있었다. ms-help : //MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/enums/csidl.htm – jmatthias

답변

0

MSDN documentation for CSIDLs에 나와 있지 않으므로 새로운 버전의 PSDK가 도움이되지 않습니다.

당신은 자신을 분명히 할 수

#define CSIDL_PROFILES 0x003E 

...하지만 그것은 완전히 MS에 의해 문서화 나타납니다 사실의 관점에서, 그것이 내가 권하고 싶습니다 뭔가 아니다.

+1

한 버전의 MSDN 페이지 (VS2005와 함께 제공되는 페이지). 그것은 마치 그것을 제거한 것입니다. ID를 직접 사용하려고했으나 0x3e를 사용할 때 셸 함수가 잘못된 인수 코드를 반환하기 때문에 작동하지 않습니다. – jmatthias

0

나는 누군가가 가치가 없다는 사실을 발견했을 때 제거되었다고 말하고 싶습니다. 어쨌든 그걸로 할 수 있니? 각 사용자에 대해 프로파일이 실제로이 디렉토리 아래에 존재하는지 여부를 판별해야합니다. 그러나 일반적으로 사용자 당이 항목을 확인하고 있으므로 새 사용자 프로필을 만들 때만 기본값이 필요할 때가 있습니다. 그리고 그것은 Windows 내부 코드입니다.

+0

제 경우에는 유용했을 것입니다. 모든 사용자 프로필 폴더를 반복하고 각 'SendTo'폴더에 파일을 복사해야하므로 실제로이 폴더의 위치를 ​​알아야했습니다. 이 코드는 관리자 권한으로 실행되는 설치 중에 실행되었습니다. 결국 현재 사용자 프로필 폴더를 읽고 부모 폴더를 결정해야했습니다. – jmatthias

+1

아니, 그게 실제로 잘못된 사례 야. 적절한 해결책은 모든 사용자를 반복하고 각 사용자의 프로필 폴더를 검색하는 것입니다. 컴퓨터에 로밍 프로필과 로밍 프로필이 혼합되어 있으면 솔루션이 실패합니다. – MSalters

0

GetProfilesDirectory()을 사용하고 있어야하지만 다른 사용자의 CSIDL이 실제로 필요한 경우 토큰과 함께 SHGetFolderPath를 호출해야합니다. (토큰이없는 경우 a hacky workaround을 사용해야합니다.)