«Доступ к пути ... запрещен» (.NET C #) - PullRequest
12 голосов
/ 20 сентября 2009

Я сохранил небольшой файл данных XML на внешний диск, без проб. Но затем я попытался использовать папку 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 ]

11 голосов
/ 20 сентября 2009

В комментариях к другому ответу вы говорите, что это настольное приложение, поэтому давайте рассмотрим каждое местоположение отдельно.

В Vista и выше обычный пользователь не имеет прав на создание файлов в корневом каталоге системного диска (обычно C :). Вы можете убедиться в этом сами, открыв C: \ в проводнике, щелкнув правой кнопкой мыши и попытавшись создать файл - вы должны получить приглашение UAC. Поэтому, если вы хотите записать в C: \, ваше приложение должно запускаться от имени администратора, через подходящий манифест, требующий повышения прав, или путем запуска отдельного процесса, когда вы хотите записать в это местоположение.

Данные приложения, Environment.SpecialFolder.ApplicationData должны работать. Если вы выводите реальный каталог, который возвращает, что вы получаете?

2 голосов
/ 20 сентября 2009

Я могу только представить, что приложение должно работать в контексте пользователя, который не имеет доступа к локальному диску, например, веб-сайт ASP.NET, работающий под анонимной учетной записью IIS или служебной учетной записью, которая имеет доступ только к соответствующим сетевым расположениям.

1 голос
/ 20 сентября 2009

Скорее всего, внешний диск отформатирован с FAT. FAT не поддерживает управление правами для пользователей, поэтому сохранение в порядке.

Кроме того, у пользователя IIS нет прав на другие папки, такие как упомянутый Адам

...