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