[c#] C #에서 홈 디렉토리의 경로를 얻습니까?
좋아, Environment.SpecialFolder를 확인했지만 여기에는 아무것도 없습니다.
C #에서 현재 사용자의 홈 디렉터리를 얻고 싶습니다. (예 c:\documents and settings\user
: XP, c:\users\user
Vista, /home/user
Unix)
나는 이것을 찾기 위해 환경 변수를 읽을 수 있다는 것을 알고 있지만 크로스 플랫폼 방식으로 이것을하고 싶습니다.
.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 #의 경우 $HOME
Unix 및 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
in을 사용하여 수행 할 수 있습니다 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