C # 获取% AppData% 的路径

C # 2008 SP1

我使用以下代码:

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

但是,我得到了一个异常,它指向我的应用程序从哪里运行:

找不到路的一部分 “ D: Projects SubVersionProjects CatDiader bin Debug% AppData% DateLinks.xml”。

我认为 %AppData%应该找到相对路径,当我走到 Start|Run|%AppData%文件资源管理器时,它会把我带到那个目录。

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

405848 次浏览

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

(如果不存在,必须添加using System)。

%AppData%是一个环境变量,它们不会自动展开。net中的任何地方,尽管您可以显式地使用Environment.ExpandEnvironmentVariable方法来这样做。然而,我仍然强烈建议你使用GetFolderPath,因为Johannes Rössel在评论中指出,%AppData%在某些情况下可能不会被设置。

最后,创建如下示例所示的路径:

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

我认为把%AppData%放在这样的字符串中是行不通的。

试一试

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

你也可以使用

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

来展开%AppData%变量。

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

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

相反,你需要这样做:

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

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

如果还有另一种更“抽象”的方式来获得App_Data,我很乐意听到如何。

在。net2.0中,可以使用变量Application.UserAppDataPath

其中最好的方法使用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

只是想分享另一种方式访问'App_Data'文件夹在我的mvc应用程序,以防有人需要这个。

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

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

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

ASP。NET中,需要在应用程序池中设置Load User Profile设置,但这还不够。在\Windows\System32\inetsrv\Config\applicationHost.config中有一个名为setProfileEnvironment的隐藏设置,由于某种原因默认关闭,而不是像文档中描述的那样打开。您可以更改默认值或在应用程序池中设置它。Environment类中的所有方法将返回正确的值。

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

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

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

  • Environment.SpecialFolder.ProgramFiles -用于程序文件X64文件夹
  • Environment.SpecialFolder.ProgramFilesX86 -用于程序文件X86文件夹

完整列表请检查在这里

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);