Перезапись файлов разрешений - C # / ASP.NET - PullRequest
3 голосов
/ 30 октября 2009

При реализации чтения / записи XML-файла в моем приложении я увидел, что при вызове XElement.Save ("myfile.xml") он перезапишет существующий файл.

Это поведение по умолчанию для всех методов, которые сохраняют файлы в C # / ASP.NET, или зависит от разрешений, предоставленных ASP.NET?

Если мое приложение будет развернуто разными людьми на разных установках хостинга, какие факторы я должен принять во внимание для возможных ограничений (если таковые имеются), которые могут быть наложены на мое приложение при чтении / записи файлов?

Позволяет ли определенный сервер только перезаписывать существующие файлы, когда я удаляю старый?

При сохранении файлов, которые позже будут использоваться моим приложением, является ли App_Data самой безопасной папкой для их сохранения?

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

Проблема поведения по умолчанию действительно отличается от проблемы с разрешениями ...

Не существует единого руководящего принципа поведения по умолчанию при перезаписи в методах .NET Framework, которые сохраняют данные в файлы. Для любого данного метода, который вы вызываете, вы должны исследовать поведение по умолчанию. Если вам это не нравится, вы можете найти обходной путь. Например, метод XmlDocument.Save имеет перегрузку, которая принимает поток вместо пути к файлу. Вы можете использовать это, предоставив FileStream, открытый с использованием FileMode, отличного от Create (что используется при перегрузке XmlDocument.Save (string)).

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

  1. Учетная запись пользователя, под которой выполняется код, должна иметь права на создание / удаление / изменение (как попытка кода) файла.
  2. Сам код должен иметь соответствующие разрешения безопасности доступа к коду для операции изменения файла.
1 голос
/ 30 октября 2009

Это поведение по умолчанию для всех методов, которые сохраняют файлы в C # / ASP.NET : Обычно это должно быть задокументировано в записи MSDN метода. Например, в документации к конструктору StreamWriter прямо упоминается, что файлы перезаписываются. К сожалению, XElement.Save не имеет такой спецификации, поэтому строго говоря , вы, вероятно, не должны полагаться на это поведение и использовать, например, обходной путь, описанный Николь.

Лично я не верю, что это зависит от сервера и что XElement.Save всегда будет перезаписывать файл, но чтобы убедиться, что вам придется изучить исходный код XElement.Save (используя дизассемблер, декомпилятор или справочный источник .NET ). Однако даже тогда полагаться на это поведение было бы плохой практикой, поскольку оно недокументировано и может измениться в будущих выпусках Framework.

О каталоге: Да, App_Data - это место, куда должны идти файлы, созданные вашим приложением.

0 голосов
/ 30 октября 2009

Вы можете проверить, существует ли файл или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...