Сохраняет файл нормально, когда он маленький/пустой, но говорит, что доступ запрещен, когда он больше

#c#

Вопрос:

Я очищаю данные, а затем сохраняю детали в HTML — документе. Чтобы представить это в перспективе, максимальное количество строк в таблице HTML равно 200.

Во время выполнения теста выполняются следующие действия:

 string fileDate = DateTime.Now.AddDays(1).ToString("dddd, dd MMMM yyyy");
string dayofweek = DateTime.Now.AddDays(1).DayOfWeek.ToString();
System.IO.File.WriteAllText(@""   fileDate   ".html", "hi"); // blank doc with "hi" in it.
 

Однако, используя данные, которые я очищаю, которые заполняются моей content строкой, которую можно увидеть здесь:

 string fileDate = DateTime.Now.AddDays(1).ToString("dddd, dd MMMM yyyy");
string dayofweek = DateTime.Now.AddDays(1).DayOfWeek.ToString();
System.IO.File.WriteAllText(@""   fileDate   ".html", content);
 

Он выдает ошибку, которая заключается в следующем

Система.Исключение несанкционированного доступа: Доступ к пути ‘C:WINDOWSsystem32Friday, 18 июня 2021.html-в этом отказано. в System.IO.__Ошибка.Ошибка WinIOError(код ошибки Int32, строка maybeFullPath) в System.IO.FileStream.Инициализация(путь к строке, режим файлового режима, доступ к файловому процессу, права Int32, Логические права пользователя, общий доступ к файлу, размер буфера Int32, параметры файлов, параметры безопасности, атрибуты безопасности, Строковый msgPath, Логический bFromProxy, Логический путь использования, Логическая контрольная точка) в системе.IO.FileStream..ctor(Путь к строке, режим файлового режима, доступ к файловому процессу, общий доступ к файлу, размер буфера Int32, параметры файлов, путь к строке MSG, логический bFromProxy, Логический путь к использованию, логическая контрольная точка) в System.IO.StreamWriter.Создайте файл(Путь к строке, логическое добавление, Логическая контрольная точка) в System.IO.StreamWriter..ctor(Путь к строке, Логическое добавление, Кодировка, Размер буфера Int32, Логическая контрольная точка) в System.IO.File.InternalWriteAllText(Путь к строке, содержимое строки, Кодировка, Логическая проверка) в файле System.IO.WriteAllText(путь к строке, содержимое строки) в carValLocal.Program.Main(строка[] args) в C:UsersGamersourcereposcarValLocalcarValLocalProgram.cs:line 512

Я не понимаю, как содержимое HTML-документа может измениться, если я уполномочен писать файл. Это не имеет смысла, кто-нибудь знает, как это исправить?

Пожалуйста, обратите внимание, что для этого используется консольное приложение на C#.

Комментарии:

1. 1) В чем смысл @"" ? 2) Почему вы сохраняете файл в папке System32? Вы уверены, что у вас есть необходимые разрешения (и веская причина) для этого? 3) Каков фактический путь, который вы используете в своем коде?

2. 1. Возможно, просто плохое кодирование, я довольно новичок в C#. 2. Я просто делаю это, чтобы оно попало в мою папку отладки. Теперь, хотя это полезная информация, чтобы знать, что это, вероятно, не очень хорошая идея, это не объяснило бы, почему пустой HTML-документ сохраняется, но документ с контентом, конечно, нет?

Ответ №1:

Я думаю, что причина не в содержимом файла. Это то, как вы начинаете свою программу. В своем коде вы сохраняете содержимое html-файла в рабочем каталоге, и ваша программа запускается с C:WindowsSystem32 и когда он хочет создать новый файл, он получает ошибку.

Для проверки того, что вы можете хранить свой файл в каком-либо абсолютном каталоге, у вас есть разрешение на запись или измените свой рабочий каталог.

Для использования абсолютного каталога можно попробовать что-то вроде этого

 System.IO.File.WriteAllText(@"D:"   fileDate   ".html", content);