“访问路径...被拒绝”(.NET C#)

问题描述:

我一直在保存一个小的XML数据文件到外部驱动器,没有probs。但后来我试图使用ApplicationData文件夹和其他人,甚至C:\但没有运气。我遇到了“访问路径”C:\“拒绝”之类的错误。“访问路径...被拒绝”(.NET C#)

只是为了确认,文件是用当前代码创建并读取到外部驱动器。我想这是与安全&权限有关,但我没有发现任何有用的东西。

在此先感谢您,如果您能指出我在这个正确的方向!

 string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml"; // external drive ok :-) 
     //string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     //string fipData = @"C:\"; 

     // if the XML data file doesn't exist, create it 
     bool dataFileExists = File.Exists(fipData); 
     if (dataFileExists) 
     { 
      // read the XML values 
      XDocument xData = XDocument.Load(fipData); 
      //... 
     } 
     else 
     { 
      // create & save the XML data file 
      XElement xLastPath = new XElement(el_lastPath, ""); 
      XElement xLastCode = new XElement(el_lastCode, ""); 

      XElement xRoot = new XElement(el_root); 
      xRoot.Add(xLastPath); 
      xRoot.Add(xLastCode); 

      XDocument newDataFile = new XDocument(); 
      newDataFile.Add(xRoot); 

      try 
      { 
       newDataFile.Save(fipData); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Data file unable to be created. System message:{0}".Put(Environment.NewLine + Environment.NewLine + ex.Message)); 
      } 
     } 
+0

嗯...我不知道为什么,但今天早上醒来,它适用于ApplicationData。很高兴知道为什么。从Debug到Release构建时,我遇到了一些问题。我只能假设它与此有关。谢谢你的想法! – MrGreggles 2009-09-21 02:18:38

+0

示例代码中注释掉的“fipData”声明实际上并未指定文件名 - 只是路径。这是一个错字吗? – 2009-09-22 05:08:05

+0

腮红马特,这可能是原因。漫长的一天,脑力激荡。谢谢你们所有的想法! – MrGreggles 2009-09-26 07:06:16

我只能想象应用程序必须在无权访问本地驱动器的用户环境中运行,例如,在匿名IIS帐户下运行的ASP.NET网站或只能访问相关网络位置的服务帐户。

+0

糟糕,这里的背景是: *我的个人电脑 * Windows 7 *桌面应用程序 这只是我的UAC设置(默认)可能太高?我怎么知道它是否可以在别人的电脑上工作? – MrGreggles 2009-09-20 13:16:45

最有可能外部驱动器与FAT格式化。 FAT不支持用户的权限管理,因此可以保存。

除此之外的IIS用户对其他文件夹没有权利像亚当已经

提到在评论到另一个答案你说这是一个桌面应用程序,所以让我们分别对待每一个位置。

在Vista及更高版本下,普通用户无权在系统驱动器的根目录(通常为C :)中创建文件。您可以通过在资源管理器中打开C:\,右键单击并尝试创建一个文件来看到这一点 - 您应该得到一个UAC提示。因此,如果您想写入C:\,那么您的应用程序需要以管理员身份运行,通过适当的清单要求提升,或者在要写入该位置时启动单独的进程。

应用程序数据,Environment.SpecialFolder.ApplicationData应该工作。如果你输出实际的目录返回你得到什么?

+0

感谢您的回复! Environment.SpecialFolder.ApplicationData: C:\ Users \ MrGreggles \ AppData \ Roaming \ SIIYM Data.xml – MrGreggles 2009-09-21 00:23:32

+0

它现在可以工作,打我为什么。 – MrGreggles 2009-09-21 02:19:17

+2

AppData应该始终工作,这非常奇怪! – blowdart 2009-09-21 05:47:12