현재 사용자 디렉토리는 어떻게 얻을 수 있습니까?


100

이것을 사용하여 :

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

이 출력을 얻습니다.

"C:\\Documents and Settings\\[USER]\\Application Data"

모든 사용자의 루트 디렉토리를 어떻게 얻을 수 있습니까? 즉 :

"C:\\Documents and Settings\\[USER]\\"

1
내가 사용한 대답은 삭제되었습니다 ... 이것은 작동합니다 : Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData))
juan

2
Juan-항상 효과가있는 것은 아닙니다. 이번에는 운이 좋았습니다.
Scott Ivey

왜 그런 겁니까? 비스타 에서처럼? 또는 XP에서 갑자기 작동이 중지됩니까?
juan

5
Jay Riggs의 답변에 대한 Scott의 의견을 참조하십시오. W7 및 Vista에서는 Application Data 폴더가 다른 위치에 있으므로 1이 아닌 2 개의 디렉토리로 이동해야합니다.
Thomas

답변:


48

이것이 좋은 해결책이 될 수 있습니다 : 이것이 Vista / Win7인지 XP인지 고려하고 환경 변수를 사용하지 않고 :

string path = Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName;
if ( Environment.OSVersion.Version.Major >= 6 ) {
    path = Directory.GetParent(path).ToString();
}

환경 변수를 사용하는 것이 훨씬 더 명확합니다.


165

시험:

System.Environment.GetEnvironmentVariable("USERPROFILE");

편집하다:

사용중인 .NET 버전이 4 이상인 경우 Environment.SpecialFolder열거 형을 사용할 수 있습니다 .

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

16
폴더 경로를 제공하기 위해 환경 변수에 의존하는 것은 정말 나쁜 생각입니다. 이러한 환경 변수를 변경할 수있는 방법은 너무 많습니다. 권장되는 방법은 Environment.SpecialFolder 열거를 사용하는 것입니다.
Jim Mischel

1
불행히도 msdn.microsoft.com/en-us/library/… 에서 볼 수 있듯이 USERPROFILE 폴더는 해당 열거에 포함되어 있지 않습니다.
Thomas

Environment.SpecialFolder는 .NET 1.1에 포함되어에게, 그냥 "사용자 프로필"폴더가없는 ...
VINI

@JimMischel 그러나 그것들은 변경 가능하지 않습니까? 그리고 항상 환경 변수로 참조하면 괜찮습니다.
Nate-Wilkins

22

다음과 같이 UserProfile 경로를 얻을 수 있습니다.

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);


11

Environment.SpecialFolder열거 형 을 조사하는 동안에도 매우 유용합니다 . LINQPad를 사용하거나 솔루션을 만들고 다음 코드를 실행합니다.

Enum.GetValues(typeof(Environment.SpecialFolder))
    .Cast<Environment.SpecialFolder>()
    .Select(specialFolder => new
    {
        Name = specialFolder.ToString(),
        Path = Environment.GetFolderPath(specialFolder)
    })
    .OrderBy(item => item.Path.ToLower())

폴더 경로

이것은 내 컴퓨터의 결과입니다.

MyComputer
LocalizedResources
CommonOemLinks
ProgramFiles            C:\Program Files (x86) 
ProgramFilesX86         C:\Program Files (x86) 
CommonProgramFiles      C:\Program Files (x86)\Common Files 
CommonProgramFilesX86   C:\Program Files (x86)\Common Files 
CommonApplicationData   C:\ProgramData 
CommonStartMenu         C:\ProgramData\Microsoft\Windows\Start Menu 
CommonPrograms          C:\ProgramData\Microsoft\Windows\Start Menu\Programs 
CommonAdminTools        C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
CommonStartup           C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 
CommonTemplates         C:\ProgramData\Microsoft\Windows\Templates 
UserProfile             C:\Users\fisch 
LocalApplicationData    C:\Users\fisch\AppData\Local 
CDBurning               C:\Users\fisch\AppData\Local\Microsoft\Windows\Burn\Burn 
History                 C:\Users\fisch\AppData\Local\Microsoft\Windows\History 
InternetCache           C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCache 
Cookies                 C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCookies 
ApplicationData         C:\Users\fisch\AppData\Roaming 
NetworkShortcuts        C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
PrinterShortcuts        C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 
Recent                  C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Recent 
SendTo                  C:\Users\fisch\AppData\Roaming\Microsoft\Windows\SendTo 
StartMenu               C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu 
Programs                C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
AdminTools              C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
Startup                 C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
Templates               C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Templates 
Desktop                 C:\Users\fisch\Desktop 
DesktopDirectory        C:\Users\fisch\Desktop 
Favorites               C:\Users\fisch\Favorites 
MyMusic                 C:\Users\fisch\Music 
MyDocuments             C:\Users\fisch\OneDrive\Documents 
MyDocuments             C:\Users\fisch\OneDrive\Documents 
MyPictures              C:\Users\fisch\OneDrive\Pictures 
MyVideos                C:\Users\fisch\Videos 
CommonDesktopDirectory  C:\Users\Public\Desktop 
CommonDocuments         C:\Users\Public\Documents 
CommonMusic             C:\Users\Public\Music 
CommonPictures          C:\Users\Public\Pictures 
CommonVideos            C:\Users\Public\Videos 
Windows                 C:\Windows 
Fonts                   C:\Windows\Fonts 
Resources               C:\Windows\resources 
System                  C:\Windows\system32 
SystemX86               C:\Windows\SysWoW64 

( "fisch"는 내 성의 처음 5 자입니다. 이것은 Microsoft 계정으로 로그인 할 때 할당 된 사용자 이름입니다.)


LINQPad에 대해 들어 본 적이없는 방법을 모르겠습니다. 사용해 보았습니다. 추천 해 주셔서 감사합니다.
TravisO

4
Environment.GetEnvironmentVariable("userprofile")

명명 된 SpecialFolder에서 위로 탐색하려고하면 문제가 발생하기 쉽습니다. 폴더가 예상 한 위치에 있지 않은 데는 여러 가지 이유가 있습니다. 사용자가 직접 폴더를 이동할 수 있고, GPO가 폴더를 이동할 수 있으며, UNC 경로로 폴더를 리디렉션하는 등 다양한 이유가 있습니다.

사용자 프로필에 대한 환경 변수 를 사용하면 이러한 가능한 문제를 반영해야합니다.


3

시험:

System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/

1
이것은 Windows 7에서 작동하지 않으며 폴더 구조를 올바르게 기억하면 Vista에서도 작동하지 않을 것이라고 가정합니다. 7에서는 ApplicationData 폴더가 \ % userprofile % \ AppData \ Roaming \이므로 상위 폴더 2 개 위로 이동해야합니다.
Scott Ivey

내 Vista 컴퓨터에서 "C : \ Users \ Fredrik \ AppData"를 반환합니다 (ApplicationData 폴더는 "C : \ Users \ Fredrik \ AppData \ Roaming")
Fredrik Mörk


-3
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\"

질문에 대한 의견을 살펴보십시오. 모든 버전의 Windows에 해당되는 것은 아닙니다.
와이 하 리

-3

다음 코드를 사용할 수 있습니다.

if(Platform.Equals("WinCE"))
{
    m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
}
else if(Platform.Equals("Win32NT"))
{
    m_CurrentPath = Directory.GetCurrentDirectory();
}

자세한 내용은 C #을 사용하여 WinXP 및 WinCE 모두에서 현재 디렉터리 경로 가져 오기를 참조하십시오.


3
이것은 여기에서 완전히 벗어났습니다. OP는 작업 폴더가 아닌 현재 사용자 폴더를 요구 합니다.
julealgon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.