在我的应用程序中实现XML文件读取/写入时,我看到当我调用XElement.Save(“myfile.xml”)时,它将覆盖现有文件。
对于在C#/ ASP.NET中保存文件的所有方法,此行为是否默认,还是取决于赋予ASP.NET的权限?
如果我的应用程序将由不同的人员部署在不同的主机设置上,我应该考虑哪些因素可以在读取/写入文件时放在我的应用程序上的限制(如果有的话)?
某个服务器设置是否只允许我在删除旧文件时覆盖现有文件?
保存我的应用程序稍后将使用的文件时,App_Data是保存它们的最安全的文件夹吗?
答案 0 :(得分:2)
默认行为问题实际上是权限问题的另一个问题......
在将数据保存到文件的.NET Framework方法中,覆盖默认行为没有单一的指导原则。对于您调用的任何给定方法,您应该调查默认行为。如果你不喜欢它,你可以找一个解决方法。例如,XmlDocument.Save方法具有接受流而不是文件路径的重载。您可以通过提供使用除Create之外的FileMode打开的FileStream来使用它(这是XmlDocument.Save(字符串)重载使用的。)
无论方法尝试使用何种文件创建和/或修改方法,文件修改尝试都将失败(引发异常),除非满足以下两个条件:
答案 1 :(得分:1)
对于在C#/ ASP.NET 中保存文件的所有方法,此行为是否默认:通常,应在方法的MSDN条目中记录。例如,StreamWriter constructor的文档明确提到文件被覆盖。不幸的是,XElement.Save缺乏这样的规范,所以严格来说,你可能不应该依赖这种行为并使用,例如Nicole描述的解决方法。
就个人而言,我不认为这取决于服务器,并且XElement.Save将始终覆盖该文件,但为了确保,您必须检查XElement.Save的源代码(使用反汇编程序,a反编译器或.NET reference source)。然而,即便如此,依赖这种行为也是不好的做法,因为它没有文档记录,可能会在未来的Framework版本中发生变化。
关于目录:是的,App_Data是应用程序创建的文件所在的位置。
答案 2 :(得分:0)
您可以尝试测试文件是否存在。