[英]C# getting the path of %AppData%
C# 2008 SP1
我正在使用下面的代码:
dt.ReadXml("%AppData%\\DateLinks.xml");
但是,我收到一个异常,指向我的应用程序运行的位置:
找不到路径“D:\\Projects\\SubVersionProjects\\CatDialer\\bin\\Debug\\%AppData%\\DateLinks.xml”的一部分。
我认为%AppData%
应该找到相对路径。 当我Start|Run|%AppData%
windows资源管理器将我带到该目录。
我无法输入完整路径,因为每台客户端计算机上的用户都不同。
要获取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");
如果您说的是 ASP.NET,则路径会有所不同。
我找不到任何指向 ASP.NET 的 /App_Data 的“SpecialFolder”值。
相反,您需要这样做:
HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")
(注意:您不需要 MVC 控制器中的“当前”属性)
如果有另一种更“抽象”的方式来访问App_Data
很想听听如何。
使用 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
你也可以使用
Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
扩展%AppData%
变量。
在 .net2.0 中,您可以使用变量Application.UserAppDataPath
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 文件夹有关完整列表,请查看此处。
我不认为将 %AppData% 放在这样的字符串中会起作用。
尝试
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
只是想在我的 mvc 应用程序中分享另一种访问“App_Data”文件夹的方式,以防有人需要它。
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
类上的所有方法都将返回正确的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.