C#获取%AppData%的path

C#2008 SP1

我正在使用下面的代码:

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

然而,我得到一个exception,指向我的应用程序正在运行的位置:

无法find部分path“D:\ Projects \ SubVersionProjects \ CatDialer \ bin \ Debug \%AppData%\ DateLinks.xml”。

我以为%AppData%应该find相对path。 当我Start|Run|%AppData% Windows资源pipe理器把我带到那个目录。

我不能把完整的path,因为每个客户机上的用户是不同的。

非常感谢您的任何build议,

要获取AppData目录,最好使用GetFolderPath方法:

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

%AppData%是一个环境variables,并且不会在.NET中的任何地方自动扩展,尽pipe您可以明确地使用Environment.ExpandEnvironmentVariable方法来实现。 但是,我仍强烈build议您使用GetFolderPath ,因为JohannesRössel在评论中指出, %AppData%在某些情况下可能不会被设置。

最后,创build你的示例中显示的path:

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

如果你正在谈论ASP.NET,path是不同的。

我找不到任何指向/ App_Data for ASP.NET的“SpecialFolder”值。

相反,你需要这样做:

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

(注意:您不需要MVC控制器中的“Current”属性)

如果另外一个更“抽象”的方式去App_Data会喜欢听到如何。

使用AppData目录的最佳方式使用Environment.ExpandEnvironmentVariable方法。

原因:

  • 它用有效的目录或者其他的replace你的string的一部分
  • 这是不区分大小写的
  • 它很容易和简单
  • 这是一个标准
  • 适合处理用户input

例子:

 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 

如果环境variables没有设置,那不是你的错(除了什么时候)。 我通常不会告诉别人不要重新发明轮子,但是在我第一次走向另一条路之后,意识到这是一个坏主意。

你也可以使用

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

展开%AppData%variables。

在.net2.0中,您可以使用variablesApplication.UserAppDataPath

我不认为把%AppData%放在这样的string中是可行的。

尝试

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

只是想分享另一种方式来访问我的mvc应用程序中的“App_Data”文件夹,以防有人需要。

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