2009-10-30 57 views
3

在我的應用程序中實現XML文件讀/寫時,我看到當我調用XElement.Save(「myfile.xml」)時,它將覆蓋現有文件。覆蓋文件權限 - C#/ ASP.NET

此行爲對於在C#/ ASP.NET中保存文件的所有方法都是默認的,還是取決於給予ASP.NET的權限?

如果我的應用程序將由不同的人部署在不同的主機設置上,我應該考慮在讀取/寫入文件時可能存在的應用程序可能存在的限制(如果有)的因素?

當我刪除舊的文件時,某個服務器設置是否允許我覆蓋現有的文件?

保存稍後將由我的應用程序使用的文件時,App_Data是保存在最安全的文件夾中的文件夾嗎?

+0

「文件權限」是指當前用戶(或進程)是否具有修改,執行,讀取(等)當前文件所需的憑據。你所問的是另一個問題,與XElement.Save的行爲有關。術語上的差異對您搜索時得到的結果類型有很大的影響。這不是挑剔;這是教育你。 – 2009-10-30 19:01:44

回答

2

默認行爲問題是真正從權限問題一個單獨的小動物......

沒有爲默認行爲WRT在.NET Framework方法將數據保存到文件覆蓋沒有單一的指導原則。對於您調用的任何給定方法,您應該調查默認行爲。如果你不喜歡它,你可以尋找解決方法。例如,XmlDocument.Save方法有一個接受流而不是文件路徑的重載。您可以通過提供使用除Create之外的FileMode(這是XmlDocument.Save(string)重載所使用的內容)打開的FileStream來使用它。

不論文件的創建和/或修改的方法的是,方法試圖使用的,文件修改嘗試將失敗(有凸起的一個例外),除非兩個以下條件滿足:

  1. 用戶在其下運行代碼的帳戶必須有權創建/刪除/修改(如代碼所示)文件。
  2. 代碼本身必須具有足夠的代碼訪問安全權限才能進行文件修改操作。
0

你可以有一個解決方法來測試文件是否存在。

+0

我是否需要在覆蓋文件的時候執行該操作,還是默認會發生覆蓋? – Omar 2009-10-30 18:40:08

1

這種行爲是默認在C#中保存的文件/ ASP.NET所有方法:通常情況下,應該在方法的MSDN進入記錄。例如,StreamWriter constructor的文檔明確提到文件被覆蓋。不幸的是,XElement.Save缺乏這樣的規範,所以嚴格來說,您可能不應該依賴此行爲並使用,例如,由Nicole描述的解決方法。我個人並不認爲這取決於服務器,而且XElement.Save會一直覆蓋文件,但要確保你必須檢查XElement.Save的源代碼(使用反彙編器,一個反編譯器或.NET reference source)。然而,即使如此,依靠這種行爲也是不好的做法,因爲它沒有文檔記錄,並且在將來的框架版本中可能會改變。

關於目錄:是的,App_Data是您的應用程序創建的文件應該去的地方。