Получение исключения UnauthorizedAccessException при доступе к файлу Xml с помощью метода .load C#

В настоящее время я загружаю xml-файлы на основе пользовательского ввода из текстового поля в приложении UWP, которое я делаю. Само приложение предназначено для редактирования существующих файлов, а также для их отображения (вроде текстового редактора, но только для изменения атрибутов, а не формы файла).

Все это отлично работает для любого файла на моем диске H (который, как мне кажется, полностью локальный), но не на моем диске C или любом другом сетевом диске. Ниже находится раздел, где я начинаю загружать файл пользователя в самом старте приложения.

XmlTextReader reader = new XmlTextReader(fileAddress.Text);
XmlDocument doc = new XmlDocument();
try{
                    
doc.Load(fileAddress.Text);
}
catch (System.UnauthorizedAccessException)
{
Debug.WriteLine("couldn't access file here");
} 

Ниже приведен код ошибки, который я получаю без улова с моим диском C, и это то, что я хочу знать, как я могу избежать (т.е. фактически получить доступ к файлу)

Access to the path 'C:\Users\x\Documents\XML_Files\IEC_EI_AR_XMLDesign.xml' is denied.

Ниже приведен путь, который работает (на моем диске D) для того же файла:

H:\XML_Files\IEC_EI_AR_XMLDesign.xml

Я просмотрел другие сообщения, и они, похоже, не помогают или не решают эту конкретную проблему (некоторые диски работают, а некоторые не работают). Я попробовал эти решения здесь, которые кажутся довольно разумными, но они не работали или устарели.

Мне нужно чтобы сохранить файл XML с помощью linq с кодом xml в C#

Я знаю, что мне может понадобиться изменить разрешения для этих папок или предоставить Visual Studio/моей программе повышенные разрешения, чтобы позволить пользователю получить доступ к своему собственному диску, хотя я не совсем уверен, где и как я могу это сделать. Кроме того, любое решение, которое я все равно хотел бы поддерживать привилегиями чтения/записи.

Любые советы или предложения/рекомендации приветствуются!


person skyrimpacman    schedule 26.07.2020    source источник
comment
Ваш код запускается пользователем x? В противном случае у вас не будет доступа к их папкам.   -  person Ken White    schedule 27.07.2020
comment
x — моя учетная запись пользователя, но она не работает независимо от пользователя. Я тоже пытался запустить визуальную студию от имени администратора, так что это не даст разрешения? Хотя я действительно думаю, что вы что-то понимаете, поскольку сетевые диски (без пользователей) также работают, но мой вопрос остается в силе: как я могу получить/включить доступ к этим папкам?   -  person skyrimpacman    schedule 27.07.2020
comment
Запуск от имени администратора не дает вам автоматически доступ ко всем пользовательским папкам, несмотря на распространенное мнение. Можете ли вы использовать тот же путь в адресной строке проводника для просмотра этой папки? Можете ли вы использовать тот же путь из командной строки, чтобы перейти в эту папку?   -  person Ken White    schedule 27.07.2020
comment
В обоих этих случаях с путями к диску C и диску D проводник открывает файл, используя путь, хранящийся в fileAddress.Text, и в обоих случаях попытка перейти к ним приводит к недопустимому пути. Вот почему я не понимаю, почему первый путь к диску D работает, а путь к диску C - нет, даже если путь действителен. Спасибо за вашу помощь.   -  person skyrimpacman    schedule 27.07.2020
comment
Вы ожидаете, что сможете изменить файл, или вам просто нужно иметь возможность прочитать его? Вероятно, также было бы полезно упомянуть, из какого типа приложения это выполняется.   -  person Tieson T.    schedule 27.07.2020
comment
Почему вы используете как XmlTextReader, так и XmlDocument для одного и того же файла?   -  person Alexander Petrov    schedule 27.07.2020
comment
@ТисонТ. Да как для изменения файла, так и для его чтения.   -  person skyrimpacman    schedule 27.07.2020
comment
@AlexanderPetrov Я использую XmlTextReader для отображения XML в разделе приложения ниже и использую XML-документ для внесения изменений. Это проблема, поскольку я не думаю, что это имеет отношение к этому вопросу?   -  person skyrimpacman    schedule 27.07.2020
comment
Если вы не можете предоставить минимальный воспроизводимый пример, который надежно воспроизводит эту проблему, дать хороший ответ будет невозможно. на вопрос, а не на случайное предположение, и действительно, проблема не будет разумным вопросом для переполнения стека в любом случае, потому что это будет не проблема программирования как таковая, а скорее общий вопрос пользователя компьютера. ...   -  person Peter Duniho    schedule 27.07.2020
comment
... Достаточно сказать, что доступ к файлу по какой-то причине блокируется, как и говорит вам исключение. Если вы используете Windows 10, убедитесь, что вы либо отключили функцию доступа к контролируемой папке, либо предоставили своей программе разрешение на доступ к этой папке (чтобы назвать одну из распространенных причин, по которой у программы могут возникнуть проблемы с доступом к документам пользователя, даже при запуске эта программа как этот пользователь)   -  person Peter Duniho    schedule 27.07.2020
comment
@PeterDuniho Функция контролируемого доступа к папкам, кажется, отключена / отсутствует на моем компьютере, и я попытался предоставить моему диску C те же пользователи доступа, что и мой диск H, но безуспешно. Проблема определенно заключается в том, что сама программа не может получить доступ к диску или безопасности моей организации. Мне понадобится еще несколько отзывов / советов, прежде чем я захочу рассказать им об этом. Кроме того, мне жаль, что у этого нет вашего минимального воспроизводимого примера, который вы хотите, но даже если бы он был, преобразования и идеи для меня равны или даже лучше, чем точное решение, поскольку я многому учусь.   -  person skyrimpacman    schedule 27.07.2020


Ответы (1)


Нашел обходной путь из нижнего комментария этого ответа файл, сохранив/сохранив мои файлы в C:\Users‹имя пользователя›\AppData\Local\Packages‹имя приложения/идентификатор›\LocalState

Это позволяет мне сохранять/редактировать файлы на моем диске C (я думаю, с разрешения пользователя), хотя теперь я могу рассмотреть возможность расширения этих разрешений на папки выше этого.

person skyrimpacman    schedule 17.08.2020