【问题标题】:Overwriting files permission - C#/ASP.NET覆盖文件权限 - C#/ASP.NET
【发布时间】:2009-10-30 18:28:31
【问题描述】:

在我的应用程序中实现 XML 文件读/写时,我看到当我调用 XElement.Save("myfile.xml") 时,它会覆盖现有文件。

这种行为是所有在 C#/ASP.NET 中保存文件的方法的默认行为,还是取决于授予 ASP.NET 的权限?

如果我的应用程序将由不同的人在不同的托管设置上部署,我应该考虑哪些因素来考虑读取/写入文件时可能对我的应用程序施加的限制(如果有)?

当我删除旧文件时​​,某个服务器设置是否只允许我覆盖现有文件?

当保存我的应用程序稍后将使用的文件时,App_Data 是保存它们的最安全文件夹吗?

【问题讨论】:

  • “文件权限”表示当前用户(或进程)是否具有修改、执行、读取(等)当前文件的必要凭据。您要问的是一个不同的问题,与 XElement.Save 的行为有关。术语差异对搜索时获得的结果类型有很大影响。这不是吹毛求疵。这是为了教育你。

标签: c# asp.net file


【解决方案1】:

默认行为问题实际上是与权限问题不同的问题...

对于将数据保存到文件的 .NET Framework 方法中的覆盖默认行为没有单一的指导原则。对于您调用的任何给定方法,您应该调查默认行为。如果您不喜欢它,您可以寻找解决方法。例如,XmlDocument.Save 方法具有接受流而不是文件路径的重载。您可以通过提供使用 FileMode 而非 Create (这是 XmlDocument.Save(string) 重载所使用的)打开的 FileStream 来使用它。

无论方法尝试使用哪种文件创建和/或修改方法,文件修改尝试都会失败(引发异常),除非同时满足以下两个条件:

  1. 运行代码的用户帐户必须有权创建/删除/修改(如代码所尝试的那样)文件。
  2. 代码本身必须具有足够的代码访问安全权限才能进行文件修改操作。

【讨论】:

    【解决方案2】:

    在 C#/ASP.NET 中保存文件的所有方法是否默认此行为:通常,它应记录在方法的 MSDN 条目中。例如,StreamWriter constructor 的文档明确提到文件被覆盖。不幸的是,XElement.Save 缺少这样的规范,所以严格来说,您可能不应该依赖这种行为并使用例如 Nicole 描述的解决方法。

    就我个人而言,我不认为这取决于服务器并且 XElement.Save 将始终覆盖文件,但要确保,您必须检查 XElement.Save 的源代码(使用反汇编程序,反编译器或.NET reference source)。然而,即便如此,依赖这种行为也是不好的做法,因为它没有记录在案,并且可能在框架的未来版本中发生变化。

    关于目录:是的,App_Data 是应用程序创建的文件所在的位置。

    【讨论】:

      【解决方案3】:

      您可以通过变通方法测试该文件是否存在。

      【讨论】:

      • 我是否需要在任何时候覆盖文件时都这样做,还是默认发生覆盖?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2015-02-14
      • 2015-06-25
      • 2013-04-13
      • 2019-08-24
      • 2018-12-21
      相关资源
      最近更新 更多