C# GetFolderPath(Environment.SpecialFolders.ApplicationData)返回C:
我在我的一个客户的电脑上遇到了一个非常奇怪的行为,我找不到任何线索来解释为什么会发生这种情况: 当应用程序调用C# GetFolderPath(Environment.SpecialFolders.ApplicationData)返回C:,c#,environment-variables,appdata,C#,Environment Variables,Appdata,我在我的一个客户的电脑上遇到了一个非常奇怪的行为,我找不到任何线索来解释为什么会发生这种情况: 当应用程序调用Environment.GetFolderPath(Environment.SpecialFolders.ApplicationData) 返回值将是C: 这当然是错误的,他的AppData目录是通常的C:\Users\…\AppData\Roaming,而且他的变量%AppData%正好指向该目录 有人能解释为什么会发生这种情况吗 编辑:代码 LogFilePath = Environ
Environment.GetFolderPath(Environment.SpecialFolders.ApplicationData)
返回值将是C:
这当然是错误的,他的AppData目录是通常的C:\Users\…\AppData\Roaming
,而且他的变量%AppData%
正好指向该目录
有人能解释为什么会发生这种情况吗
编辑:代码
LogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\ReportsAddin";
if (!Directory.Exists(LogFilePath) && Properties.Settings.Default.Logging == true)
{
try
{
Directory.CreateDirectory(LogFilePath);
}
catch (Exception ex)
{
// ...
}
}
然后抛出的异常表示它无法创建包含空字符串或空格的目录。对一些输出进行调查表明,从该调用返回的AppData文件夹是C:而实际上它应该是用户的真实AppData文件夹。由
环境.SpecialFolder.ApplicationData
标识的文件夹的实际路径取决于当前用户(启动程序的用户)
确保程序在存在ApplicationData文件夹的用户帐户下运行。
如果您的程序在本地系统帐户下运行,您可能需要使用其他目录
您可以使用
Environment.SpecialFolder.ApplicationData
而不是Environment.SpecialFolder.CommonProgramFiles
或Environment.SpecialFolder.CommonProgramFilesX86
尝试查看此帖子:请放置获取路径的代码,以及任何代码,直到计算实际路径为止。在我看来,字符串只是在不经意间被修改了。感谢您的参考,但我怀疑它是否适用于这里,没有使用IIS。客户端运行的是Windows8x64,和我一样,她只使用Office201032位。该应用程序是Excel加载项。顺便说一句,您的程序在哪个帐户下运行?好的,我用该特定用户的错误代码部分编辑了原始帖子。我知道当前用户及其%APPDATA%引用了有效目录。我将以何种方式验证该特定用户的ApplicationData文件夹是否确实存在?(除了检查%APPDATA%变量和路径外)为了使应用程序在一台计算机上运行,我不想更改应用程序的文件夹,因此,我很高兴能找到一个实际的解决方案。不过你说得对,我可以通过使用这些文件夹来绕过它。然而,这将使它不可能适应其他用户的需求。