C#2008 SP1
我使用下面的代码:
dt.ReadXml("%AppData%\\DateLinks.xml");
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个异常,指向我的应用程序运行位置:
找不到路径'D:\ Projects\SubVersionProjects\CatDialer\bin\Debug \%AppData%\ DateLinks.xml'的一部分.
我认为%AppData%
应该找到相对的路径.当我去Start|Run|%AppData%
Windows浏览器带我到那个目录.
我无法将完整路径放入,因为每台客户端计算机上的用户不同.
Nol*_*rin 764
要获取AppData目录,最好使用以下GetFolderPath
方法:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Run Code Online (Sandbox Code Playgroud)
using System
是一个环境变量,它们不会在.NET中的任何位置自动扩展,尽管您可以明确地使用该%AppData%
方法来执行此操作.我仍然强烈建议您使用,Environment.ExpandEnvironmentVariable
但正如JohannesRössel在评论中指出的那样,GetFolderPath
在某些情况下可能不会设置.
最后,要创建示例中显示的路径:
var fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "DateLinks.xml");
Run Code Online (Sandbox Code Playgroud)
Sim*_*ver 48
如果您正在谈论ASP.NET,那么路径就不同了.
我找不到任何指向/ App_Data for ASP.NET的'SpecialFolder'值.
相反,你需要这样做:
HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")
Run Code Online (Sandbox Code Playgroud)
(注意:您不需要MVC控制器中的"当前"属性)
如果还有另一种更"抽象"的方式,App_Data
就会喜欢听.
Bit*_*lue 31
在最佳使用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);
Run Code Online (Sandbox Code Playgroud)
记住一些用户输入%AppData%
,一些%appdata%
和一些%APpData%
你不想最终:
if (path.ToLower().StartsWith("%appdata%"))
; // path manipulation
if (path.ToLower().StartsWith("%programfiles%"))
; // path manipulation
Run Code Online (Sandbox Code Playgroud)
如果未设置环境变量,则不是您的错(除非是IS).我通常不会告诉人们不要重新发明轮子,但是在我第一次走向另一条路并意识到这是一个坏主意之后.
par*_*pet 22
你也可以使用
Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
Run Code Online (Sandbox Code Playgroud)
扩展%AppData%
变量.
应用程序数据 ?本地别名 ( C:\Users\<user>\AppData\Local
):
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Run Code Online (Sandbox Code Playgroud)
应用程序数据 ?漫游又名 ( C:\Users\<user>\AppData\Roaming
):
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Run Code Online (Sandbox Code Playgroud)
此外,了解以下信息可能会很方便:
Environment.SpecialFolder.ProgramFiles
- 用于程序文件 X64 文件夹Environment.SpecialFolder.ProgramFilesX86
- 用于程序文件 X86 文件夹有关完整列表,请查看此处。
我不认为将%AppData%放在这样的字符串中会起作用.
尝试
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
Run Code Online (Sandbox Code Playgroud)