C# getting the path of %AppData%
C(2008)SP1
我使用下面的代码:
1 | dt.ReadXml("%AppData%\\DateLinks.xml"); |
但是,我得到一个异常,它指向我的应用程序运行的位置:
Could not find a part of the path
'D:\Projects\SubVersionProjects\CatDialer\bin\Debug\%AppData%\DateLinks.xml'.
我认为江户十一号〔0〕应该找到相对的路径。当我访问
我不能输入完整的路径,因为每个客户机上的用户是不同的。
要获取appdata目录,最好使用
1 | Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) |
(如果不存在,必须添加
最后,要创建示例中所示的路径:
1 2 | var fileName = Path.Combine(Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData),"DateLinks.xml"); |
如果你说的是ASP.NET,路径是不同的。
我找不到任何指向ASP.NET的/app_数据的"specialfolder"值。
相反,您需要这样做:
1 | HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data") |
(注意:MVC控制器中不需要'current'属性)
如果有另一种更"抽象"的方法到达
使用appdata目录的最佳方法是使用
原因:
- 它用有效的目录或其他内容替换字符串的一部分。
- 它不区分大小写
- 简单明了
- 这是一个标准
- 适合处理用户输入
实例:
1 2 3 4 5 6 7 | string path; path ="%AppData%\stuff"; path ="%aPpdAtA%\HelloWorld"; path ="%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths path = Environment.ExpandEnvironmentVariables(path); Console.WriteLine(path); |
记住,有些用户键入
1 2 3 4 | if (path.ToLower().StartsWith("%appdata%")) ; // path manipulation if (path.ToLower().StartsWith("%programfiles%")) ; // path manipulation |
如果未设置环境变量,则不是您的错误(此外,如果设置了环境变量)。我通常不告诉人们不要重新发明轮子,但在我第一次走到另一个方向并意识到这是一个坏主意之后。
您也可以使用
1 | Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml"); |
扩展
在.net2.0中,可以使用变量
我认为把%appdata%放在这样的字符串中是行不通的。
尝试
1 | Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString() |
我只想在我的MVC应用程序中共享另一种访问"app_data"文件夹的方式,以防有人需要。
1 | Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data") |
对于ASP.NET,需要在应用程序池中设置
这在控制台应用程序中对我有效-
1 | string appData = System.Environment.GetEnvironmentVariable("APPDATA"); |