提问人:ant2009 提问时间:5/15/2009 最后编辑:Tot Zamant2009 更新时间:11/10/2022 访问量:431815
C# 获取 %AppData% 的路径
C# getting the path of %AppData%
问:
C# 2008 SP1
我正在使用以下代码:
dt.ReadXml("%AppData%\\DateLinks.xml");
但是,我收到一个异常,该异常指向运行我的应用程序的位置:
找不到路径的一部分 'D:\Projects\SubVersionProjects\CatDialer\bin\Debug\%AppData%\DateLinks.xml'。
我认为应该找到相对路径。当我去 Windows 资源管理器时,会带我到那个目录。%AppData%
Start|Run|%AppData%
我无法输入完整路径,因为每台客户端计算机上的用户都不同。
答:
若要获取 AppData 目录,最好使用以下方法:GetFolderPath
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
(如果不存在,则必须添加)。using System
%AppData%
是一个环境变量,并且它们不会在 .NET 中的任何位置自动展开,尽管可以显式使用 Environment.ExpandEnvironmentVariable
方法执行此操作。但是,我仍然强烈建议您使用,因为正如 Johannes Rössel 在评论中指出的那样,在某些情况下可能无法设置。GetFolderPath
%AppData%
最后,要创建示例中所示的路径,请执行以下操作:
var fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "DateLinks.xml");
评论
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
MapPath
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create)
/root/.config
我不认为将 %AppData% 放在这样的字符串中会起作用。
尝试
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
评论
ToString
您还可以使用
Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
以展开变量。%AppData%
评论
ExpandEnvironmentVariables
如果你说的是 ASP.NET,路径就不同了。
我找不到任何指向 /App_Data 的“SpecialFolder”值 ASP.NET。
相反,您需要这样做:
HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")
(注意:您不需要 MVC 控制器中的“Current”属性)
如果有另一种更“抽象”的方式,很想听听怎么做。App_Data
评论
HostingEnvironment.MapPath(@"~/App_Data")
更好,并且可以在没有 HttpContext 的 MVC/WebAPI 和 WCF 上下文中工作 - 但不确定核心'
在 .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
评论
path
Environment.ExpandEnvironmentVariable
只是想分享另一种访问我的 mvc 应用程序中的“App_Data”文件夹的方法,以防有人需要它。
Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")
评论
这在控制台应用程序中对我有用 -
string appData = System.Environment.GetEnvironmentVariable("APPDATA");
对于 ASP.NET,需要在应用池上设置设置,但这还不够。有一个名为 的隐藏设置,由于某种原因,默认情况下该设置处于关闭状态,而不是像文档中所述那样打开。您可以更改默认值,也可以在应用池中设置默认值。然后,类上的所有方法都将返回正确的值。Load User Profile
setProfileEnvironment
\Windows\System32\inetsrv\Config\applicationHost.config
Environment
AppData ⇝ 本地又名 ():C:\Users\<user>\AppData\Local
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
AppData ⇝ 漫游又名 ():C:\Users\<user>\AppData\Roaming
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
此外,了解以下信息可能很方便:
Environment.SpecialFolder.ProgramFiles
- 用于程序文件 X64 文件夹Environment.SpecialFolder.ProgramFilesX86
- 用于程序文件 X86 文件夹
如需查看完整列表,请点击此处。
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
评论