2009-05-01 2 views
9

Windows 운영 체제에서 주 하드 디스크의 드라이버 문자는 어떻게 찾을 수 있습니까?어떻게하면 시스템 드라이브 문자를 얻을 수 있습니까?

즉, 드라이브는 Program Files, System32 등입니다.

+1

프로그램이 "\ Program Files"또는 "\ Windows \ System32"의 시스템 파일이라고 가정하지 마십시오. 이들에 대한 정확한 경로를 검색하는 API 호출이 있습니다 ... – Shog9

+0

API 호출 중 하나의 예를 들려서 조사 할 수 있습니까? 나는 –

+0

http://msdn.microsoft.com/en-us/library/ms724373.aspx ... http://msdn.microsoft.com/en-us 프로그램과 연관된 특정 파일을 찾기 위해 걸려 라 /library/bb762181.aspx – Shog9

답변

4

API 전화 GetWindowsDirectory이 도움이 될 수 있습니다. API를 사용하여이 정보를 더 파싱하여 드라이브 문자 정보를 구문 분석 할 수 있습니다.

+0

** GetWindowsDirectory() 결과를 "추가로 구문 분석"하기 위해 사용하는 ** API는 무엇입니까? – unixman83

+0

Windows 디렉토리 경로의 첫 문자 만 가져옵니다. –

22

SystemDrive이라는 환경 변수가 시스템 드라이브에 설정되어 있습니다 (놀랍게도 충분히). getenv() 호출은 어떻게 호출 할 수 있습니다.

char *sysDrive = getenv ("SystemDrive"); 
if (sysDrive == NULL) { 
    // vote me down. 
} else { 
    // vote me up and use it. 
} 

This page 목록 시스템 드라이브에 존재하는 특정 디렉토리에 의존 할 수없는 경우 가능한 환경 변수의 전체 슬루.

또는 Windows API 호출 SHGetSpecialFolderPath()을 사용하고 올바른 CSIDL을 전달하십시오. 그렇다면 환경 변수에 의존 할 필요가 없습니다.

Vista의 다른 기능에 의해 대체 된 페이지에 주목하십시오 (이 기능은 새로운 기능을 둘러싼 래퍼가되므로 계속 작동해야 함).

3

SYSTEMDRIVE

PROGRAMFILES

SYSTEMROOT

WINDIR

이 프로그램 파일은 윈도우와 같은 드라이브에있는 가정하지 마십시오. 보통 그렇습니다. 일반적으로.

+2

대문자는 Windows 환경 변수의 이름입니다. – unixman83

+0

_ 보통, 확실합니까? –

0

위의 잘못된 대답과 같이 env 변수를 사용하지 마십시오.
env 변수는 사용자가 업데이트 할 수 있습니다.

+4

물론 사용자는 % WINDIR % 등의 값을 변경할 수 있지만 사용자는 레지스트리를 엉망으로 만들거나 응용 프로그램의 모든 리소스 파일을 LOLCats로 바꾸거나 Linux를 설치할 수 있습니다. 그것들은 앱이 비상 계획을 세우는 데 필요한 것들이 아닙니다. – bsneeze

+0

@cali 그런 다음 ** 무엇을 사용해야합니까? 나는 환경 변수가 오류가 발생하기 쉽다는 것에 동의한다. – unixman83

0

https://msdn.microsoft.com/en-us/library/ms724426.aspx

' 보이드 그리고 PrintError (TCHAR * MSG) { DWORD 열거; TCHAR sysMsg [256]; TCHAR * p; eNum = GetLastError(); 하는 formatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, ENUM, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), sysMsg, 256, NULL); 는 easilty에 변경 될 수 있습니다 // /*하는 formatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL 원하면 GetLastError(), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), sysMsg, 256, NULL); */

// Trim the end of the line and terminate it with a null 
p = sysMsg; 
while((*p > 31) || (*p == 9)) ++p; 
do { *p-- = 0; } while((p >= sysMsg) && 
         ((*p == '.') || (*p < 33))); 
// Display the message 
_tprintf(TEXT("\n\t%s failed with error %d (%s)"), msg, eNum, sysMsg); 

을 } ' 하지만 시스템 정보를 대부분 얻는 방법을 설명합니다. 매우 유익한 정보

+0

답을 다시 포맷하십시오. – ThomasEdwin

+0

코드 태그와 줄 바꿈으로 응답 형식을 지정해야합니다. – Alan