[c#] C #에서 홈 디렉토리의 경로를 얻습니까?

좋아, Environment.SpecialFolder를 확인했지만 여기에는 아무것도 없습니다.

C #에서 현재 사용자의 홈 디렉터리를 얻고 싶습니다. (예 c:\documents and settings\user: XP, c:\users\userVista, /home/userUnix)

나는 이것을 찾기 위해 환경 변수를 읽을 수 있다는 것을 알고 있지만 크로스 플랫폼 방식으로 이것을하고 싶습니다.

.NET (가급적이면 mscorlib 사용)으로이 작업을 수행 할 수있는 방법이 있습니까?

업데이트 : 좋아, 이것은 내가 사용한 코드입니다.

string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
                   Environment.OSVersion.Platform == PlatformID.MacOSX)
    ? Environment.GetEnvironmentVariable("HOME")
    : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");



답변

Environment.SpecialFolder.Personal실제로 홈 폴더를 반환하지 않고 내 문서 폴더를 반환 합니다. Win32에서 홈 폴더를 얻는 가장 안전한 방법은 %HOMEDRIVE%%HOMEPATH%. 환경 변수를 읽기 포스터 싶어 왜 확실하지 않다, 그래서 실제로 (유닉스와 윈도우를 통해) 할 매우 휴대용 하지 를 않습니다.

추가 편집 : 크로스 플랫폼 (Windows / Unix) C #의 경우 $HOMEUnix 및 OSX 및 %HOMEDRIVE%%HOMEPATH%Windows에서 읽었습니다 .


답변

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)

개인은 내 문서 (또는 win7 이상의 문서)입니다.


답변

나는 당신이 찾고있는 것이 있다고 믿습니다.

System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)

참고로 mscorlib.


답변

DotNetCore 1.1 System.Environment.SpecialFolder에는 존재하지 않습니다. 2.0 베타에 존재할 수 있습니다. 그때까지 이렇게하려면 다음을 사용할 수 있습니다.

var envHome = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "HOMEPATH" : "HOME";
var home = Environment.GetEnvironmentVariable(envHome);`


답변

결론은 아니오입니다. Windows와 Mono 모두에서 .NET 구현을 기대할 수있는 홈 디렉토리를 가져 오는 .NET의 단순한 시스템 기반 방법이 아닙니다.

일부 OS 감지를 수행하고 OS 특정 코드로 분기해야합니다.


답변

크로스 플랫폼 방식이라고 할 때 지원해야하는 다른 OS는 무엇입니까? Windows가 아닌 OS에서 실행중인 경우 홈 디렉토리를 찾는 방법을 선택하려면 몇 가지 간단한 OS 감지를 수행해야 할 수 있습니다.

이 웹 사이트 는 Windows에서 필요한 작업을 수행하는 방법을 제공하는 것 같습니다.


답변

GetEnvironmentVariablein을 사용하여 수행 할 수 있습니다 System.IO.

public string GetUserHome() {
    var homeDrive = Environment.GetEnvironmentVariable("HOMEDRIVE");
    if (!string.IsNullOrWhiteSpace(homeDrive))
    {
        var homePath = Environment.GetEnvironmentVariable("HOMEPATH");
        if (!string.IsNullOrWhiteSpace(homePath))
        {
            var fullHomePath = homeDrive + Path.DirectorySeparatorChar + homePath;
            return Path.Combine(fullHomePath, "myFolder");
        }
        else
        {
            throw new Exception("Environment variable error, there is no 'HOMEPATH'");
        }
    }
    else
    {
        throw new Exception("Environment variable error, there is no 'HOMEDRIVE'");
    }
}

그런 다음 창 아래에 생성됩니다. C:\\\\Users\\myusername\\myFolder

사용하는 경우

var fullHomePath = Path.Combine(homeDrive.ToString(), homePath.ToString())

다음을 생성하기 때문에 실패합니다. \\Users\\myusername\\myFolder