C# 2008 SP1

我正在使用下面的代码:

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

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

找不到路径的一部分 D: \ SubVersionProjects \ CatDialer \ bin \ \项目调试\ % AppData % \ DateLinks.xml”。

我认为%AppData%应该找到相对路径。当我开始|运行|%AppData% windows资源管理器带我到那个目录。

我不能输入完整的路径,因为每个客户端机器上的用户是不同的。


当前回答

如果你说的是ASP.NET,路径是不同的。

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

相反,你需要这样做:

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

(注意:在MVC控制器中你不需要'Current'属性)

如果还有其他更“抽象”的方法来获得App_Data,我很乐意听到是怎么做的。

其他回答

这是为我工作在控制台应用程序-

string appData = System.Environment.GetEnvironmentVariable("APPDATA");

AppData⇝本地aka (C:\Users\<user>\AppData\Local):

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

AppData⇝漫游aka (C:\Users\<user>\AppData\漫游):

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

此外,了解以下信息可能会很方便:

programfiles -用于程序文件X64文件夹 Environment.SpecialFolder。ProgramFilesX86 -用于程序文件X86文件夹

查看完整的列表。

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

使用AppData目录的最佳方式是使用Environment。ExpandEnvironmentVariables方法。

原因:

它将字符串的部分替换为有效的目录或其他东西 不区分大小写 这很容易,也不复杂 这是一个标准 很适合处理用户输入

例子:

string path;
path = @"%AppData%\stuff";
path = @"%aPpdAtA%\HelloWorld";
path = @"%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths

path = Environment.ExpandEnvironmentVariables(path);
Console.WriteLine(path);

更多信息:

%ALLUSERSPROFILE%   C:\ProgramData
%APPDATA%   C:\Users\Username\AppData\Roaming
%COMMONPROGRAMFILES%    C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)%   C:\Program Files (x86)\Common Files
%COMSPEC%   C:\Windows\System32\cmd.exe
%HOMEDRIVE% C:
%HOMEPATH%  C:\Users\Username
%LOCALAPPDATA%  C:\Users\Username\AppData\Local
%PROGRAMDATA%   C:\ProgramData
%PROGRAMFILES%  C:\Program Files
%PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
%PUBLIC%    C:\Users\Public
%SystemDrive%   C:
%SystemRoot%    C:\Windows
%TEMP% and %TMP%    C:\Users\Username\AppData\Local\Temp
%USERPROFILE%   C:\Users\Username
%WINDIR%    C:\Windows

如果你说的是ASP.NET,路径是不同的。

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

相反,你需要这样做:

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

(注意:在MVC控制器中你不需要'Current'属性)

如果还有其他更“抽象”的方法来获得App_Data,我很乐意听到是怎么做的。