"Доступ к пути... запрещен" (.NET С#)
Я сохранил небольшой файл данных XML на внешний диск, без проблем. Но потом я попытался использовать папку ApplicationData и другие, даже C: \, но не повезло. Я получаю сообщение об ошибке "Доступ к пути" C:\ "denied".
Просто для подтверждения, файл создается и считывается с текущим кодом на внешнем диске. Я думаю, что это связано с безопасностью и разрешениями, но я не нашел ничего слишком полезного.
Спасибо заранее, если вы можете указать мне в правильном направлении на этом!
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));
}
}
Ответы
Ответ 1
В комментариях к другому ответу вы говорите, что это настольное приложение, поэтому давайте рассмотрим каждое местоположение отдельно.
В Vista и за ее пределами обычный пользователь не имеет прав на создание файлов в корневом каталоге системного диска (обычно C:). Вы можете это увидеть сами, открыв C:\in explorer, щелкнув правой кнопкой мыши и попытавшись создать файл - вы должны получить приглашение UAC. Поэтому, если вы хотите писать в C: \, то ваше приложение должно запускаться как администратор, с помощью подходящего объявления с требованием высоты или путем запуска отдельного процесса, когда вы хотите записать в это место.
Данные приложения, Environment.SpecialFolder.ApplicationData, однако, должны работать. Если вы выведете фактический каталог, который возвращает то, что вы получаете?
Ответ 2
Я могу только представить, что приложение должно работать в контексте пользователя, который не имеет доступа к локальному диску, например. веб-сайт ASP.NET, запущенный под анонимной учетной записью IIS или учетной записью службы, которая имеет доступ только к соответствующим сетевым местоположениям.
Ответ 3
Скорее всего, внешний накопитель формируется с помощью FAT. FAT не поддерживает управление правами для пользователей, поэтому сохранение там нормально.
Кроме того, пользователь IIS не имеет прав на другие папки, такие как Адам, упомянутый уже