Редактировать: Я нашел решение. Я думал, что ошибка возникает при попытке записать файлы, которые нужно сравнить, в действительности они генерируются, когда я пытался прочитать файл, который нужно сравнить. У меня была синтаксическая ошибка в команде, вызываемой для исполняемого файла сравнения, и это привело к тому, что файл результатов не был сгенерирован. Я видел нарушение доступа, когда пытался прочитать несуществующий файл (да, я должен был проверить наличие файла). У меня возникли проблемы с получением BC для создания сравнения (по какой-то причине одна и та же команда работает из командной строки, но не работает при запуске с C#), но я буду просить об этом в качестве отдельного вопроса, если это необходимо.System.UnauthorizedAccessException при попытке записать файл из приложения asp.net
Я работаю над .net-приложением, которое используется для сравнения изменений кода между сборками.
часть приложения, которое я пытаюсь добавить, использует за пределами сравнения, чтобы сгенерировать html-сравнение двух фрагментов кода.
Для этого я создаю файлы из кода (обратите внимание, что я знаю, что имена файлов будут иметь проблему конфликта для нескольких пользователей, я исправлю это позже), а затем вызывая выполнение сравнения за пределами командной строки из командной строки. Я генерировать файлы, используя следующий код:
//write the code to a local disk file
System.IO.File.WriteAllText(@workingFolder + "\\File1.txt", (String)dataRow["OldMethodCode"]);
System.IO.File.WriteAllText(@workingFolder + "\\File2.txt", (String)dataRow["NewMethodCode"]);
Значение workingFolder заключается в следующем: «C: \ Inetpub \ Wwwroot»
Проблема, что я бегу в том, что когда этот код бежал и он пытается создать эти файлы, которые я получаю ниже исключение:
[UnauthorizedAccessException: Доступ к пути "C: \ Inetpub \ Wwwroot. отказано] System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath) +216 System.IO.FileStream.Init (String путь, FileMode режим, FileAccess доступа, Int32 права, булевы useRights, Обменник доля, Int32 BufferSize, варианты FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +1430 System.IO.FileStream. .ctor (String путь, режим FileMode, FileAccess доступа, Обменник доля, Int32 BufferSize, FileOptions опции, строка msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +214
System.IO.StreamReader..ctor (String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) +187 System.IO.File.InternalReadAllText (String path, Encodi Кодирование нг, булева checkHost) +90
_Default.gridView_SelectedIndexChanged (_sender объекта, EventArgs е) +1024 System.Web.UI.WebControls.GridView.HandleEvent (EventArgs е, булева CausesValidation, String ValidationGroup) +1241
System.Web .UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804
Я попробовал несколько вещей, чтобы решить эту проблему.Как и с любой проблемой, вы можете потерять все ваши варианты, но вот те, которые я думал, имели самые высокие шансы на успех (но не работаю):
- Добавить NETWORKSERVICE как полные права доступа к папке Wwwroot
- Добавить Everyone с полными правами доступа к папке Wwwroot
- Изменения пула приложений управляемому режим трубопровода к классическим
- Установить приложение бассейн для запуска с настраиваемым пользователем и дать этому пользователю полных прав доступа к папке
- ДАЙ практически любого другого пользователя, который, как представляется, связан полные привилегии в папку
- Переместите папку в другую локальную директорию за пределами wwwroot и укажите на нее и попробуйте все вышеперечисленное с этой папкой.
Во всех случаях я не могу создать файл, тем более доступ к нему для запуска сравнения.
Есть ли у кого-нибудь совет, как решить эту проблему, или альтернативный/лучший способ выполнить сравнение, которое не потребует создания файлов?
Спасибо!
Вам нужно сохранить файл под C: \ inetpub \ wwwroot? Можете ли вы попробовать поместить его в подпапку? – Paritosh
Извините, я должен был включить это в мой оригинальный пост.Я уже пробовал поместить его в подпапку, а также папку полностью вне структуры. Те же результаты в обоих случаях. –