2009-09-20 20 views
12

Zapisuję mały plik danych XML na dysku zewnętrznym, brak problemów. Ale potem próbowałem użyć folderu ApplicationData i innych, nawet C: \, ale bez powodzenia. Otrzymuję komunikat o błędzie "Dostęp do ścieżki" C: \ "zabroniony"."Dostęp do ścieżki ... jest zabroniony" (.NET C#)

Aby potwierdzić, plik zostanie utworzony i będzie odczytywany poprawnie z bieżącym kodem na dysk zewnętrzny. Sądzę, że ma to coś wspólnego z uprawnieniami bezpieczeństwa, ale nie znalazłem niczego zbyt użytecznego.

Z góry dziękuję, jeśli możesz wskazać mi właściwy kierunek!

 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

Umm ... Nie wiem dlaczego, ale budząc się rano, to działa dla ApplicationData. Byłoby miło wiedzieć dlaczego. Miałem problem z przejściem z wersji Debug do wersji Release. Mogę tylko założyć, że było z tym związane. Dziękuję wszystkim za twoje myśli! – MrGreggles

+0

Skomentowane deklaracje "fipData" w przykładowym kodzie w rzeczywistości nie określają nazwy pliku - tylko ścieżki. Czy to literówka? –

+0

Blush Matt, to mogło być przyczyną. Długi dzień, mózg zap. Dzięki chłopaki za wasze pomysły! – MrGreggles

Odpowiedz

2

Mogę sobie tylko wyobrazić, że aplikacja musi być uruchomiona w kontekście użytkownika, który nie ma dostępu do dysku lokalnego, na przykład witryna ASP.NET działająca pod anonimowym kontem IIS lub konto usługi, które ma tylko dostęp do odpowiednich lokalizacji sieciowych.

+0

Ups, kontekst jest tu: * Mój osobisty PC * Windows 7 * pulpitu app jest to tylko, że moje ustawienia UAC (domyślnie) są zbyt wysokie, może? Skąd mam wiedzieć, czy zadziała na komputerze innej osoby? – MrGreggles

1

Najprawdopodobniej dysk zewnętrzny jest sformatowany z FAT. FAT nie obsługuje zarządzania prawami dla użytkowników, więc zapisywanie jest w porządku.

Poza tym, że Użytkownik IIS nie ma żadnych praw do innych folderów, jak już wspomniano Adam

11

W komentarzach do innej odpowiedzi można powiedzieć jest to aplikacja, więc pozwala traktować każdą lokalizację oddzielnie.

W systemie Vista i nie tylko zwykły użytkownik nie ma uprawnień do tworzenia plików w katalogu głównym dysku systemowego (zwykle C :). Możesz to zobaczyć samodzielnie, otwierając C: \ w eksploratorze, klikając prawym przyciskiem myszy i próbując utworzyć plik - powinieneś otrzymać monit UAC. Jeśli więc chcesz pisać do C: \, to twoja aplikacja musi działać jako administrator, przez odpowiednią, wymagającą elewację, lub uruchamiać oddzielny proces, kiedy chcesz pisać w tej lokalizacji.

Dane aplikacji, Environment.SpecialFolder.ApplicationData powinny jednak działać. Jeśli wypiszesz rzeczywisty katalog, który zwraca to, co otrzymujesz?

+0

Dzięki za odpowiedź! Environment.SpecialFolder.ApplicationData: C: \ Users \ MrGreggles \ AppData \ Roaming \ SIIYM Data.xml – MrGreggles

+0

Działa teraz, bije mnie dlaczego. – MrGreggles

+2

AppData powinna zawsze działać, to bardzo dziwne! – blowdart

Powiązane problemy