programing

C# %AppData% 경로 가져오기

sourcejob 2023. 5. 24. 22:06
반응형

C# %AppData% 경로 가져오기

C# 2008 SP1

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

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

그러나 응용 프로그램이 실행되는 위치를 알려주는 예외가 발생했습니다.

경로 'D:'의 일부를 찾을 수 없습니다.\프로젝트\하위 버전 프로젝트\CatDialer\bin\Debug\%AppData%\DateLinks.xml'입니다.

나는 생각했습니다.%AppData%상대 경로를 찾아야 합니다.내가 갈때Start|Run|%AppData%윈도우 탐색기는 나를 그 디렉토리로 데려갑니다.

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

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

(반드시 추가해야 함)using System존재하지 않는 경우)

%AppData%는 환경 변수이며 .NET의 모든 위치에서 자동으로 확장되지는 않지만 이 방법을 사용하여 확장할 수 있습니다.저는 여전히 당신이 사용할 것을 강력하게 제안합니다.GetFolderPath하지만, 요하네스 뢰셀이 논평에서 지적했듯이,%AppData%특정 상황에서는 설정되지 않을 수 있습니다.

마지막으로, 예제에 표시된 대로 경로를 작성하려면 다음을 수행합니다.

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

AppData 디렉토리를 사용하는 가장 좋은 방법은 method를 사용하는 것입니다.

이유:

  • 문자열의 일부를 유효한 디렉토리 또는 기타로 대체합니다.
  • 대소문자를 구분하지 않습니다.
  • 쉽고 복잡하지 않습니다.
  • 그것은 표준입니다.
  • 사용자 입력을 처리하기에 좋습니다.

예:

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

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

추가 정보:

%ALLUSERSPROFILE%   C:\ProgramData
%APPDATA%   C:\Users\Username\AppData\Roaming
%COMMONPROGRAMFILES%    C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)%   C:\Program Files (x86)\Common Files
%COMSPEC%   C:\Windows\System32\cmd.exe
%HOMEDRIVE% C:
%HOMEPATH%  C:\Users\Username
%LOCALAPPDATA%  C:\Users\Username\AppData\Local
%PROGRAMDATA%   C:\ProgramData
%PROGRAMFILES%  C:\Program Files
%PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
%PUBLIC%    C:\Users\Public
%SystemDrive%   C:
%SystemRoot%    C:\Windows
%TEMP% and %TMP%    C:\Users\Username\AppData\Local\Temp
%USERPROFILE%   C:\Users\Username
%WINDIR%    C:\Windows

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

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

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

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

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

더 '추상적인' 방법이 있다면,App_Data방법을 듣고 싶습니다.

사용할 수도 있습니다.

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

확장하기 위해%AppData%변수.

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

AppData Local(로컬)C:\Users\<user>\AppData\Local):

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

AppData 로밍 (C:\Users\<user>\AppData\Roaming):

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

또한 다음 사항을 쉽게 알 수 있습니다.

  • Environment.SpecialFolder.ProgramFiles프로그램 파일 X64 폴더의 경우
  • Environment.SpecialFolder.ProgramFilesX86프로그램 파일 X86 폴더의 경우

전체 목록은 여기에서 확인하십시오.

그런 문자열에 %AppData%를 넣는 것은 효과가 없을 것 같습니다.

해라

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

누군가 이것이 필요할 경우를 대비하여 제 mvc 애플리케이션의 'App_Data' 폴더에 액세스하는 다른 방법을 공유하고 싶었습니다.

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

이것은 콘솔 애플리케이션에서 저에게 효과가 있습니다.

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

입니다.NET의 경우Load User Profile앱 풀에서 설정해야 하지만 그것만으로는 충분하지 않습니다.이이지정숨설있겨다습니정이진라는 이름의 숨겨진 .setProfileEnvironment\Windows\System32\inetsrv\Config\applicationHost.config이 기능은 설명서에 설명된 것처럼 켜지는 대신 기본적으로 해제됩니다.기본값을 변경하거나 앱 풀에서 설정할 수 있습니다.의 모든 방법Environment그러면 클래스가 올바른 값을 반환합니다.

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

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

반응형