Best way to get application folder path
I see that there are some ways to get the application folder path:
Application.StartupPath
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.GetCurrentDirectory()
Environment.CurrentDirectory
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
System.IO.Path.GetDirectory(Application.ExecutablePath)
What is the best way depending on the situation?
AppDomain.CurrentDomain.BaseDirectory
응용 프로그램 설치 디렉터리에 상대적인 위치의 파일에 액세스하는 데 가장 유용할 것입니다.
In an ASP.NET application, this will be the application root directory, not the bin subfolder - which is probably what you usually want. In a client application, it will be the directory containing the main executable.
In a VSTO 2005 application, it will be the directory containing the VSTO managed assemblies for your application, not, say, the path to the Excel executable.
The others may return different directories depending on your environment - for example see @Vimvq1987's answer.
CodeBase
파일이 발견된 위치이며 http://로 시작하는 URL일 수 있습니다.어떤 경우에Location
어셈블리 다운로드 캐시가 될 수 있습니다.GAC의 어셈블리에 대해 CodeBase를 설정할 수는 없습니다.
업데이트 요즘(.NET Core, .NET Standard 1.3+ 또는 .NET Framework 4.6+) 사용하는 것이 더 좋습니다.AppContext.BaseDirectory
보다는AppDomain.CurrentDomain.BaseDirectory
둘 다 동일하지만 여러 AppDomain은 더 이상 지원되지 않습니다.
Application.StartupPath
그리고 7.System.IO.Path.GetDirectoryName(Application.ExecutablePath)
Windows Forms 응용 프로그램에서만 작동합니다.System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
다음과 같은 것을 제공할 것입니다.
"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Temporary ASP.NET Files\\legal-services\\e84f415e\\96c98009\\assembly\\dl3\\42aaba80\\bcf9fd83_4b63d101"
실행 중인 페이지가 있는 곳입니다.AppDomain.CurrentDomain.BaseDirectory
웹 애플리케이션은 유용할 수 있고 다음과 같은 것을 반환할 것입니다."C:\\hg\\Services\\Services\\Services.Website\\"
기본 디렉터리이며 매우 유용합니다.System.IO.Directory.GetCurrentDirectory()
그리고 5.Environment.CurrentDirectory
프로세스가 시작된 위치를 알려줍니다. 따라서 Visual Studio에서 디버그 모드로 실행되는 웹 앱의 경우 다음과 같습니다."C:\\Program Files (x86)\\IIS Express"
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
위치를 알려줄 것입니다..dll
코드를 실행하는 것은, 웹 앱을 위한 것일 수 있습니다."file:\\C:\\hg\\Services\\Services\\Services.Website\\bin"
예를 들어 콘솔 앱 포인트 2-6은 디렉토리입니다..exe
파일이.
Hope this saves you some time.
Note that not all of these methods will return the same value. In some cases, they can return the same value, but be careful, their purposes are different:
Application.StartupPath
를 반환합니다.StartupPath
매개 변수(애플리케이션을 실행할 때 설정할 수 있음)
System.IO.Directory.GetCurrentDirectory()
현재 디렉터리를 반환합니다. 이 디렉터리는 응용 프로그램이 있는 폴더일 수도 있고 그렇지 않을 수도 있습니다.마찬가지로Environment.CurrentDirectory
파일에서 이하는 경우 중인 ASP.NET의 됨). DLL 파일의 경로는 다음과 .NET에서는 해당됨).
웹 응용 프로그램의 경우 현재 웹 응용 프로그램 루트 디렉터리를 가져오려면 일반적으로 현재 수신 요청을 웹 페이지로 호출합니다.
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
실제로 로그인한 사용자의 세션(0이 아닌 작업 관리자 세션 1)에서 Win32 API를 통해 Windows 서비스에서 프로세스를 시작했습니다.여기서 우리는 어떤 변수가 가장 좋은지 알 수 있습니다.
위 질문의 7가지 경우 모두 다음과 같은 결과가 있습니다.
Path1: C:\Program Files (x86)\MyProgram
Path2: C:\Program Files (x86)\MyProgram
Path3: C:\Program Files (x86)\MyProgram\
Path4: C:\Windows\system32
Path5: C:\Windows\system32
Path6: file:\C:\Program Files (x86)\MyProgram
Path7: C:\Program Files (x86)\MyProgram
같은 작업을 수행하는 일부 사람들은 사례에 가장 적합한 변수를 검색할 때 도움이 될 수 있습니다.
제 경험상, 가장 좋은 방법은 이것들의 조합입니다.
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
폴더를 합니다.Directory.GetCurrentDirectory()
에서 잘 작동합니다.NetCore이지만 그렇지 않습니다. 은 합니다.System.AppContext.BaseDirectory
그리고.AppDomain.CurrentDomain.BaseDirectory
에서 잘 작동합니다.네트지만 아닙니다. 넷코어의 합니다.
대상으로 지정해야 하는 클래스 라이브러리입니다.넷 그리고 .Netcore 라이브러리를 호스팅하는 프레임워크를 확인하고 둘 중 하나를 선택합니다.
로의 경로를 확보하기 위해.exe
사용하는 단순한 데스크톱 애플리케이션의 경우
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
은 로의 ▁to다▁path로 경로를 반환합니다..exe
.
또한 여러 도메인의 경우.exe
됩니다. "" " " " " 를 반환합니다..exe
의첫호 의실된행해에의 첫 호출에 ExecuteAssembly(String)
관리되지 않는 항목인 경우 를 반환합니다.
요.GetExecutingAssembly()
이름 짓기는 나에게 혼란스러웠습니다, 왜냐하면 나는 그것을 얻기를 기대했기 때문입니다..exe
하지만 그것은 그것을 돌려줍니다..dll
또는.exe
넣었기 에 가배곳 의 경우에는 우서그래드.GetExecutingAssembly()
라이브러리에 배치되면 라이브러리를 반환합니다.
나는 이것을 성공적으로 사용했습니다.
System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)
이것은 linqpad 안에서도 작동합니다.
루트 디렉터리:
DriveInfo cDrive = new DriveInfo(System.Environment.CurrentDirectory);
var driverPath = cDrive.RootDirectory;
루트 디렉터리를 가져오는 방법을 알고 있는 경우:
string rootPath = Path.GetPathRoot(Application.StartupPath)
것이것System.IO.Path.GetDirectory(Application.ExecutablePath)
으로 되었습니다.System.IO.Path.GetDirectoryName(Application.ExecutablePath)
언급URL : https://stackoverflow.com/questions/6041332/best-way-to-get-application-folder-path
'programing' 카테고리의 다른 글
반환 *의 결과를 MariaDB에 어떻게 저장합니까? (0) | 2023.06.14 |
---|---|
부울 만족도에 대한 클래스 스케줄링 [다항식 시간 단축] (0) | 2023.06.14 |
R 패키지를 언로드할 때 동적 라이브러리를 언로드해야 합니까? (0) | 2023.06.14 |
동일한 페이지에서 다른 버전의 jQuery를 실행하려면 어떻게 해야 합니까? (0) | 2023.06.14 |
MariaDB 쿼리가 너무 느립니다. (0) | 2023.06.14 |