C#2008 SP1
我正在使用以下代码:
dt.ReadXml("%AppData%\\DateLinks.xml");
但是,我收到的异常指向运行我的应用程序的位置:
无法找到路径的一部分 'd:\项目\ SubVersionProjects \ CatDialer \ BIN \调试\%APPDATA%\ DateLinks.xml'。
我认为%AppData%
应该找到相对路径。当我走Start|Run|%AppData%
时,Windows资源管理器会将我带到该目录。
我无法将完整路径放入,因为每台客户端计算机上的用户都不同。
答案 0 :(得分:726)
要获取 AppData 目录,最好使用GetFolderPath
方法:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
(如果不存在,必须添加using System
。)
%AppData%
是一个环境变量,虽然您可以明确使用Environment.ExpandEnvironmentVariable
方法来实现,但它们不会在.NET中的任何位置自动扩展。我仍然强烈建议你使用GetFolderPath
,因为正如JohannesRössel在评论中指出的那样,在某些情况下可能不会设置%AppData%
。
最后,要创建示例中显示的路径:
var fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "DateLinks.xml");
答案 1 :(得分:48)
如果您正在谈论ASP.NET,那么路径会有所不同。
我找不到任何指向/ App_Data for ASP.NET的'SpecialFolder'值。
相反,你需要这样做:
HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")
(注意:您不需要MVC控制器中的'Current'属性)
如果有另一种更“抽象”的方式来到App_Data
会喜欢听到如何。
答案 2 :(得分:28)
最佳方式使用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);
请记住,有些用户输入%AppData%
,有些用户%appdata%
,有些用户%APpData%
你不想最终得到:
if (path.ToLower().StartsWith("%appdata%"))
; // path manipulation
if (path.ToLower().StartsWith("%programfiles%"))
; // path manipulation
如果未设置环境变量,则不是您的错(除非 IS )。我通常不会告诉人们不重新发明轮子,但是在我第一次走向另一条路并意识到这是一个坏主意之后。
答案 3 :(得分:22)
您也可以使用
Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
展开%AppData%
变量。
答案 4 :(得分:15)
在.net2.0中,您可以使用变量Application.UserAppDataPath
答案 5 :(得分:6)
我不认为将%AppData%放在这样的字符串中会起作用。
试
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
答案 6 :(得分:3)
只想分享另一种访问App_Data'的方法。我的mvc应用程序中的文件夹,以防有人需要这个。
Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")
答案 7 :(得分:1)
这对我来说是一个控制台应用程序 -
string appData = System.Environment.GetEnvironmentVariable("APPDATA");
答案 8 :(得分:1)
对于ASP.NET,需要在应用程序池上设置Load User Profile
设置,但这还不够。 setProfileEnvironment
中有一个名为\Windows\System32\inetsrv\Config\applicationHost.config
的隐藏设置,由于某种原因,该设置默认情况下处于关闭状态,而不是documentation中描述的打开状态。您可以更改默认值,也可以在应用程序池中进行设置。然后Environment
类上的所有方法都将返回正确的值。
答案 9 :(得分:1)
AppData⇝本地,又名({{1)}:
C:\Users\<user>\AppData\Local
AppData⇝漫游,又名({{1)}:
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
另外,可能很容易知道:
C:\Users\<user>\AppData\Roaming
-用于程序文件X64文件夹Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
-用于程序文件X86文件夹要查看完整列表,请检查here。