development

C #이 % AppData %의 경로를 얻는 중

big-blog 2020. 2. 28. 19:18
반응형

C #이 % AppData %의 경로를 얻는 중


C # 2008 SP1

아래 코드를 사용하고 있습니다 :

dt.ReadXml("%AppData%\\DateLinks.xml");

그러나 응용 프로그램이 실행되는 위치를 가리키는 예외가 발생합니다.

경로 'D : \ Projects \ SubVersionProjects \ CatDialer \ bin \ Debug \ % AppData % \ DateLinks.xml'의 일부를 찾을 수 없습니다.

%AppData%상대 경로를 찾아야 한다고 생각했습니다 . Start|Run|%AppData%Windows 탐색기 로 이동하면 해당 디렉토리로 이동합니다.

각 클라이언트 컴퓨터에서 사용자가 다르기 때문에 전체 경로를 넣을 수 없습니다.


AppData 디렉토리 를 가져 오려면 다음 GetFolderPath방법 을 사용하는 것이 가장 좋습니다 .

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

( using System없는 경우 추가해야 함 ).

%AppData%는 환경 변수이며 .NET의 어느 곳에서나 자동으로 확장되지 않지만 Environment.ExpandEnvironmentVariable메서드를 명시 적으로 사용할 수는 있습니다 . GetFolderPath그러나 Johannes Rössel이 의견에서 지적했듯이 %AppData%특정 상황에서는 설정되지 않을 수 있기 때문에 여전히 사용하는 것이 좋습니다 .

마지막으로 예제와 같이 경로를 만들려면

var fileName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.ApplicationData), "DateLinks.xml");

ASP.NET을 사용하는 경우 경로가 다릅니다.

ASP.NET에 대해 / App_Data를 가리키는 'SpecialFolder'값을 찾을 수 없습니다.

대신이 작업을 수행해야합니다.

 HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")  

(참고 : MVC 컨트롤러에는 '현재'속성이 필요하지 않습니다.)

또 다른 '추상적 인'방법이 있다면 App_Data어떻게 듣는지 좋아할 것입니다.


BEST 의 AppData 디렉토리를 사용하는 방법은, IS 사용하는 Environment.ExpandEnvironmentVariable방법.

원인:

  • 문자열의 일부를 유효한 디렉토리 또는 다른 것으로 바꿉니다.
  • 대소 문자를 구분하지 않습니다
  • 쉽고 간단합니다
  • 그것은 표준입니다
  • 사용자 입력 처리에 적합

예 :

string path;
path = @"%AppData%\stuff";
path = @"%aPpdAtA%\HelloWorld";
path = @"%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths

path = Environment.ExpandEnvironmentVariables(path);
Console.WriteLine(path);

일부 사용자는 %AppData%, 일부 %appdata%및 일부는 기억하고 %APpData%싶지 않습니다.

if (path.ToLower().StartsWith("%appdata%"))
    ; // path manipulation
if (path.ToLower().StartsWith("%programfiles%"))
    ; // path manipulation

환경 변수가 설정되어 있지 않은 경우 ( IS 이외의 경우) 결함이 아닙니다 . 나는 보통 사람들을 말하지 마 하지 내가 먼저 다른 길을 가서는 나쁜 생각 이었다는 것을 깨달았다 - 재 발명 바퀴를하지만 후.


당신은 또한 사용할 수 있습니다

Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");

%AppData%변수 를 확장합니다 .


.net2.0에서는 변수를 사용할 수 있습니다 Application.UserAppDataPath


% AppData %를 문자열에 넣는 것은 효과가 없다고 생각합니다.

시험

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()

누군가가 이것을 필요로하는 경우 내 mvc 응용 프로그램의 'App_Data'폴더에 액세스하는 다른 방법을 공유하고 싶었습니다.

 Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")

이것은 콘솔 응용 프로그램에서 나를 위해 일하고 있습니다.

string appData = System.Environment.GetEnvironmentVariable("APPDATA");

ASP.NET의 Load User Profile경우 앱 풀 에서 설정을 설정해야하지만 충분하지 않습니다. 에 숨겨진 설정이 setProfileEnvironment있으며 \Windows\System32\inetsrv\Config\applicationHost.config, 설명서에 설명 된대로 어떤 이유로 든 기본적으로 해제되어 있습니다 . 기본값을 변경하거나 앱 풀에서 기본값을 설정할 수 있습니다. Environment클래스의 모든 메소드는 적절한 값을 리턴합니다.

참고 URL : https://stackoverflow.com/questions/867485/c-sharp-getting-the-path-of-appdata



반응형