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

时间:2009-09-20 12:50:20

标签: c# .net permissions file-permissions

我一直在将一个小的XML数据文件保存到外部驱动器,没有probs。但后来我尝试使用ApplicationData文件夹和其他文件,甚至C:\但没有运气。我收到的错误如“访问路径”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));
            }
        }

3 个答案:

答案 0 :(得分:11)

在对另一个答案的评论中,您说这是一个桌面应用程序,所以让我们分别处理每个位置。

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

外部驱动器很可能是用FAT格式化的。 FAT不支持用户的权限管理,因此保存即可。

除此之外,IIS用户没有像Adam提到的其他文件夹的权利