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")