IT

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

lottoking 2020. 9. 1. 07:43
반응형

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에서 필요한 작업을 수행하는 방법을 제공하는 것입니다.


GetEnvironmentVariable에서 사용하여 수행 할 수 있습니다 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


나는 그것을 테스트 할 기계가 없지만 %HOMESHARE%당신을 위해 일할 수 있습니다. 그렇지 않으면 여기에 꽤 좋은 환경 변수 목록이 있습니다 .

참고 URL : https://stackoverflow.com/questions/1143706/getting-the-path-of-the-home-directory-in-c

반응형