Environment.GetFolderPath(...CommonApplicationData) 仍然返回“C:\Documents and Settings\” 在维斯塔上
据我了解,您应该使用 Environment.GetFolderPath
方法,以便拥有与操作系统无关的代码...
Windows XP 使用 C:\Documents and Settings\
。 Windows Vista 使用C:\ProgramData
和C:\Users
。
我在 Windows Vista 计算机上使用下面的代码,它返回一个 C:\Documents and Settings\
目录,而不是应有的 C:\ProgramData
...有任何想法吗?
string commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
try
{
File.CreateText(
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) +
"\\mycompany\\uid");
log.Debug("Created file successfully");
}
catch (Exception ex)
{
log.Error("Unable to create the uid file: ", ex);
}
As I understand it, you're supposed to use the Environment.GetFolderPath
method so you have OS independent code...
Windows XP uses C:\Documents and Settings\
. Windows Vista uses C:\ProgramData
and C:\Users
.
I'm using the code below on a Windows Vista computer and it's returning a C:\Documents and Settings\
directory instead of C:\ProgramData
like it should... Any ideas?
string commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
try
{
File.CreateText(
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) +
"\\mycompany\\uid");
log.Debug("Created file successfully");
}
catch (Exception ex)
{
log.Error("Unable to create the uid file: ", ex);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我的安装程序复制了在 XP 计算机上生成的 log.txt 文件。 我看着那个日志文件,以为它是在 Vista 上生成的。 一旦我将 log4net 配置修复为“Vista 兼容”。 Environment.GetFolderPath 返回预期结果。 因此,我要关闭这篇文章。
以下 SpecialFolder 路径参考可能有用:
Windows Server 2003 上的输出:
Vista 上的输出:
My installer copied a log.txt file which had been generated on an XP computer. I was looking at that log file thinking it was generated on Vista. Once I fixed my log4net configuration to be "Vista Compatible". Environment.GetFolderPath was returning the expected results. Therefore, I'm closing this post.
The following SpecialFolder path reference might be useful:
Output On Windows Server 2003:
Output on Vista:
Ubuntu 9.10 上的输出 -> Ubuntu 12.04 with mono 2.10.8.1:
在带有 mono 4.2.1 的 Ubuntu 16.04 上的输出,
其中 $USER 是当前用户
使用 dotnet core (3.0.100) 在 Ubuntu 16.04 上的输出
使用 Xamarin 7.2 在 Android 6 上输出
其中 $APPNAME 是 Xamarin 应用程序的名称(例如 MyApp.Droid)
使用 MAUI - .net 7.0 在 Android 11 上输出 strong>
使用 MAUI - .net 8.0 在 Android 11 上输出
使用 Xamarin 7.2 在 iOS Simulator 10.3 上输出
其中 $DEVICEGUID 是模拟器 GUID(取决于所选模拟器)
>使用 Xamarin 7.2 在 ipad 10.3 上输出
使用 Xamarin 16.4 在 ipad 13.3 上输出
使用 .net core 3.1 在 Windows 10 上输出
使用 Ubuntu 18.04 上输出.net core 3.1
使用 .net core 7.0.112 在 Ubuntu 22.04 上输出
使用 .net core 8.0.100-rc.2.23502.2 在 Ubuntu 22.04 上输出
警告重大更改
使用 .net core 3.1 在 MacOS Catalina 上输出
使用 .net core 3.1 在 Snap Package - Core 18 上输出 strong>
注意:我发现如果
/home/$USER/snap/$APPNAME/x$VERSION/.local/share
存在快照环境,则LocalApplicationData
将返回那条路。 但是,如果路径不存在,则返回空字符串。如果 $HOME/Documents 文件夹不存在,还在 Linux 上使用 dotnet 8 进行测试
Environment.GetFolderPath(Environment.SpecialFolder.Personal)
返回空字符串。Output on Ubuntu 9.10 -> Ubuntu 12.04 with mono 2.10.8.1:
Output on Ubuntu 16.04 with mono 4.2.1
where $USER is the current user
Output on Ubuntu 16.04 using dotnet core (3.0.100)
Output on Android 6 using Xamarin 7.2
Where $APPNAME is the name of your Xamarin application (eg. MyApp.Droid)
Output on Android 11 using MAUI - .net 7.0
Output on Android 11 using MAUI - .net 8.0
Output on iOS Simulator 10.3 using Xamarin 7.2
Where $DEVICEGUID is the simulator GUID (depending on the selected simulator)
Output on ipad 10.3 using Xamarin 7.2
Output on ipad 13.3 using Xamarin 16.4
Output on windows 10 using .net core 3.1
Output on Ubuntu 18.04 using .net core 3.1
Output on Ubuntu 22.04 using .net core 7.0.112
Output on Ubuntu 22.04 using .net core 8.0.100-rc.2.23502.2
WARNING BREAKING CHANGE
Output on MacOS Catalina using .net core 3.1
Output on Snap Package - Core 18 using .net core 3.1
Note: I found that if a snap environment if
/home/$USER/snap/$APPNAME/x$VERSION/.local/share
exists thenLocalApplicationData
will return that path. However if the path doesn't exist it returns empty string.Also testing with dotnet 8 on Linux
Environment.GetFolderPath(Environment.SpecialFolder.Personal)
returns empty string if $HOME/Documents folder doesn't exist.Windows 10 上的输出
如果您想记录自己的代码片段
Output on Windows 10
Code Snippet if you want to log your own
Windows 7(64 位)上的输出
Windows XP 上的输出
Output on Windows 7 (64-bit)
Output on Windows XP
我正在寻找 macOS 列表,但一无所获,也许这对某人有帮助。
使用 net5.0 在 macOS Catalina (10.15.7) 上输出
我已将我的用户名替换为 $USER。
来自 pogosama 的代码片段。
I was looking for a listing of macOS but found nothing, maybe this helps someone.
Output on macOS Catalina (10.15.7) using net5.0
I have replaced my username with $USER.
Code Snippet from pogosama.