2009-09-20 210 views
12

我一直在保存一個小的XML數據文件到外部驅動器,沒有probs。但後來我試圖使用ApplicationData文件夾和其他人,甚至C:\但沒有運氣。我遇到了「訪問路徑」C:\「拒絕」之類的錯誤。「訪問路徑...被拒絕」(.NET C#)

只是爲了確認,文件是用當前代碼創建並讀取到外部驅動器。我想這是與安全&權限有關,但我沒有發現任何有用的東西。

在此先感謝您,如果您能指出我在這個正確的方向!

 string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml"; // external drive ok :-) 
     //string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     //string fipData = @"C:\"; 

     // if the XML data file doesn't exist, create it 
     bool dataFileExists = File.Exists(fipData); 
     if (dataFileExists) 
     { 
      // read the XML values 
      XDocument xData = XDocument.Load(fipData); 
      //... 
     } 
     else 
     { 
      // create & save the XML data file 
      XElement xLastPath = new XElement(el_lastPath, ""); 
      XElement xLastCode = new XElement(el_lastCode, ""); 

      XElement xRoot = new XElement(el_root); 
      xRoot.Add(xLastPath); 
      xRoot.Add(xLastCode); 

      XDocument newDataFile = new XDocument(); 
      newDataFile.Add(xRoot); 

      try 
      { 
       newDataFile.Save(fipData); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Data file unable to be created. System message:{0}".Put(Environment.NewLine + Environment.NewLine + ex.Message)); 
      } 
     } 
+0

嗯...我不知道爲什麼,但今天早上醒來,它適用於ApplicationData。很高興知道爲什麼。從Debug到Release構建時,我遇到了一些問題。我只能假設它與此有關。謝謝你的想法! – MrGreggles 2009-09-21 02:18:38

+0

示例代碼中註釋掉的「fipData」聲明實際上並未指定文件名 - 只是路徑。這是一個錯字嗎? – 2009-09-22 05:08:05

+0

腮紅馬特,這可能是原因。漫長的一天,腦力激盪。謝謝你們所有的想法! – MrGreggles 2009-09-26 07:06:16

回答

2

我只能想象應用程序必須在無權訪問本地驅動器的用戶環境中運行,例如,在匿名IIS帳戶下運行的ASP.NET網站或只能訪問相關網絡位置的服務帳戶。

+0

糟糕,這裏的背景是: *我的個人電腦 * Windows 7 *桌面應用程序 這只是我的UAC設置(默認)可能太高?我怎麼知道它是否可以在別人的電腦上工作? – MrGreggles 2009-09-20 13:16:45

1

最有可能外部驅動器與FAT格式化。 FAT不支持用戶的權限管理,因此可以保存。

除此之外的IIS用戶對其他文件夾沒有權利像亞當已經

11

提到在評論到另一個答案你說這是一個桌面應用程序,所以讓我們分別對待每一個位置。

在Vista及更高版本下,普通用戶無權在系統驅動器的根目錄(通常爲C :)中創建文件。您可以通過在資源管理器中打開C:\,右鍵單擊並嘗試創建一個文件來看到這一點 - 您應該得到一個UAC提示。因此,如果您想寫入C:\,那麼您的應用程序需要以管理員身份運行,通過適當的清單要求提升,或者在要寫入該位置時啓動單獨的進程。

應用程序數據,Environment.SpecialFolder.ApplicationData應該工作。如果你輸出實際的目錄返回你得到什麼?

+0

感謝您的回覆! Environment.SpecialFolder.ApplicationData: C:\ Users \ MrGreggles \ AppData \ Roaming \ SIIYM Data.xml – MrGreggles 2009-09-21 00:23:32

+0

它現在可以工作,打我爲什麼。 – MrGreggles 2009-09-21 02:19:17

+2

AppData應該始終工作,這非常奇怪! – blowdart 2009-09-21 05:47:12