Mam problem polegający na tym, że próbuję usunąć plik, ale pojawia się wyjątek.
if (result == "Success")
{
if (FileUpload.HasFile)
{
try
{
File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
string filename = Path.GetFileName(btnFileUpload.FileName);
btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
}
catch (Exception ex)
{
Message(ex.ToString());
}
}
}
Powinienem również zauważyć, że folder, z którego próbuję usunąć, ma pełną kontrolę nad usługami sieciowymi.
Pełny komunikat o wyjątku to:
System.UnauthorizedAccessException: Odmowa dostępu do ścieżki „C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg”. w System.IO .__ Error.WinIOError (Int32 errorCode, String możeFullPath) w System.IO.File.Delete (String path) w hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (Object sender, EventArgs e) w C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs: wiersz 242
Jakieś pomysły?
źródło
Odpowiedzi:
Zgodnie z metodą File.Delete ...
UnauthorizedAccessException
Oznacza jedną z 4 rzeczy:źródło
Path is a directory.
dzięki za tę wskazówkę :) Pomogło mi.Ja też miałem problem, stąd natknąłem się na ten post. Dodałem następujący wiersz kodu przed i po operacji Kopiuj / Usuń.
Usunąć
Kopiuj
źródło
To stary problem, ale natknąłem się na niego podczas wyszukiwania. Okazuje się, że brakowało mi właściwego składnika nazwy pliku w ścieżce zapisu dla SaveAs ...
źródło
Gdy użytkownik próbuje połączyć się z witryną sieci Web, usługi IIS przypisują połączenie do konta IUSER_ComputerName , gdzie nazwa_komputera to nazwa serwera, na którym są uruchomione usługi IIS. Domyślnie konto IUSER_ComputerName jest członkiem grupy Goście. Ta grupa ma ograniczenia bezpieczeństwa. Spróbuj uzyskać wielki dostęp do IUSER_ComputerName do tego folderu
Tutaj jest bardzo dobrze opisana odpowiedź na temat bezpieczeństwa IIS
Mam nadzieję że to pomoże
źródło
Kliknij prawym przyciskiem myszy Visual studio i kliknij Uruchom jako administrator
źródło
Otrzymałem błąd, ponieważ nie zdawałem sobie sprawy, że miejscem docelowym powinien być plik. Jako drugi parametr miałem folder (który działa w cmd). i otrzymałem,
Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.
ponieważ C #File.Move
chce tam plik, nie tylko dla pierwszego parametru, ale także dla drugiego, więc jeśli umieścisz katalog jako drugi parametr, to próbuje napisać plik, tak jak wc:\crp
przypadku katalogu o nazwiec:\crp
.byłoby to niepoprawne
File.Move(args[0],"c:\\crp");
Więc to byłoby poprawne
File.Move(args[0],"c:\\crp\\a.a");
To samo dotyczy
File.Copy
źródło
Jeśli jest to witryna sieci Web usług IIS, w której występuje problem, sprawdź właściwość Identity w ustawieniach zaawansowanych puli aplikacji, z której korzysta witryna lub aplikacja. Może się okazać, że jest ustawiona na ApplicationPoolIdentity, aw takim przypadku to użytkownik będzie musiał mieć dostęp do ścieżki.
Możesz też przejść do starego stylu i po prostu ustawić tożsamość na usługę sieciową i przyznać użytkownikowi usługi sieciowej dostęp do ścieżki.
źródło
Musisz zmodyfikować uprawnienia folderu, z którego próbujesz usunąć / zapisać w. Kliknij prawym przyciskiem myszy folder zawierający i użyj karty Zabezpieczenia, aby zezwolić na modyfikowanie praw użytkownika, w ramach którego działa Twoja aplikacja.
źródło
Uderzam w to samo. Sprawdź, czy plik NIE JEST UKRYTY.
źródło
Miałem również do czynienia z tym problemem, gdy moja usługa okien zaczęła rzucać wyjątek
Jako rozwiązanie sprawdziłem konto użytkownika powiązane z moją usługą, jak pokazano na poniższym zrzucie ekranu
Więc w moim przypadku była to USŁUGA SIECIOWA
A następnie przeszedł do właściwości folderu aby sprawdzić, czy powiązane konto użytkownika istnieje również na karcie uprawnień. Brakowało go w moim przypadku, a kiedy go dodałem i rozwiązałem mój problem.
Aby uzyskać więcej informacji, sprawdź poniższy zrzut ekranu
źródło
dla mnie ten sam problem, wskazałem folder zamiast pliku.
więc upewnij się, że w path, podaj ścieżkę + nazwę pliku
źródło
Sprawdź właściwości plików. Jeśli zaznaczone jest tylko do odczytu, odznacz je. To był mój osobisty problem z wyjątkiem UnauthorizedAccessException.
źródło
Otrzymałem ten błąd i rozwiązałem go w jednej chwili. Nie wiem, dlaczego wszystkie moje foldery są tylko do odczytu , Anulowałem opcję tylko do odczytu i zastosowałem ją. Jednak nadal jest tylko do odczytu. Więc przeniosłem plik do folderu głównego, działa - tak dziwnie.
źródło
Wyjątek UnauthorizedAccessException jest generowany, gdy system operacyjny odmawia dostępu z powodu błędu we / wy lub błędu zabezpieczeń.
Jeśli próbujesz uzyskać dostęp do pliku lub klucza rejestru, upewnij się, że nie jest on przeznaczony tylko do odczytu .
źródło
Jeśli używasz BitDefendera, istnieje duża szansa, że jego Bezpieczne pliki funkcja zablokowała twoją operację. Jest to forma ochrony przed oprogramowaniem typu ransomware, która jest dostępna w niektórych bardziej zaawansowanych wersjach.
Upewnij się, że przyznasz swojej aplikacji dostęp w BitDefender i spróbuj ponownie.
Więcej szczegółów można znaleźć na tej stronie pomocy BitDefender .
źródło
Miałem ten sam problem na nowo przeniesionej witrynie na współdzielonym serwerze. Rozwiązany za pomocą panelu hosta internetowego (DotNetPanel), ustawiając true, „zezwalaj na zapisywanie”. Więc jeśli jesteś na serwerze współdzielonym przed przejrzeniem całego kodu, warto przyjrzeć się konfiguracji serwera i zaoszczędzić dużo czasu.
źródło
Należy pamiętać, że jeśli próbujesz dotrzeć do ścieżki folderu współdzielonego z kodu, nie musisz tylko nadawać odpowiednich uprawnień do folderu fizycznego za pośrednictwem zakładki zabezpieczeń. Musisz także „udostępnić” folder odpowiedniemu użytkownikowi puli aplikacji za pośrednictwem karty Udostępnij
źródło
Miałem do czynienia z tym błędem, ponieważ
Czasami, kiedy ścieżka z nazwy pliku i
Combine
FileName = ""
Stało się
Path Directory
nie tym,file
co jest problemem, jak wspomniano powyżejwięc trzeba sprawdzić,
FileName
jak toźródło
Miałem dokładny błąd podczas usuwania pliku. Była to usługa systemu Windows działająca w ramach konta usługi, która nie mogła usunąć dokumentu .pdf z folderu współdzielonego, mimo że miała pełną kontrolę nad folderem.
Udało mi się przejść do karty Zabezpieczenia w folderze udostępnionym> Zaawansowane> Udostępnij> Dodaj.
Następnie dodałem konto usługi do grupy administratorów, zastosowałem zmiany i konto usługi było wtedy w stanie wykonywać wszystkie operacje na wszystkich plikach w tym folderze.
źródło
Dla tych, którzy próbują stworzyć aplikację UWP (Universal Windows), uprawnienia do plików są znacznie bardziej ograniczone i ogólnie są domyślnie odrzucane. Zastępuje również uprawnienia użytkowników systemu. Zasadniczo będziesz mieć dostęp tylko do plików w obu
Możesz przeczytać więcej tutaj, aby uzyskać szczegółowe informacje => https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions
źródło
W moim przypadku problemem był Norton. Mój program wewnętrzny nie ma odpowiedniego podpisu cyfrowego, a gdy próbował usunąć plik, zgłosił wyjątek UnauthorizedAccessException.
Jeśli dostaniesz powiadomienie, możesz sobie z tym poradzić. W moim przypadku nie dało powiadomienia, że zauważyłem. Oto jak zapobiec blokowaniu programu przez Nortona.
źródło
Ja również napotkałem ten sam problem, próbując to zrobić po wdrożeniu na serwerze:
Udzieliłem uprawnień w usługach IIS innej grupie, w tym administratorowi, i mój problem został rozwiązany.
źródło
Odkryłem, że ten błąd może wystąpić w TRYBIE PROJEKTOWANIA, a nie w? tryb wykonywania ... Jeśli robisz coś takiego, jak tworzenie elementu klasy, który wymaga dostępu do pliku .INI lub .HTM (plik konfiguracyjny, plik pomocy), możesz NIE inicjować elementu w deklaracji, ale zainicjować go później in FORM_Load () etc ... When you DO initialize ... Użyj instrukcji Guard IF:
Dzięki temu program MSVS Designer nie będzie próbował utworzyć pliku INI lub HTM, gdy jesteś w trybie projektowania.
źródło
Wystąpił ten błąd, gdy próbowałem bardzo szybko zmienić nazwę folderu po jego przeniesieniu lub utworzeniu.
Proste
System.Threading.Thread.Sleep(500);
rozwiązanie:źródło
W moim przypadku wielokrotnie tworzyłem i usuwałem 10000 folderów. Wydaje mi się, że problem polegał na tym, że chociaż metoda
Directory.Delete(path, true)
powraca, podstawowy mechanizm systemu operacyjnego może nadal usuwać pliki z dysku. A kiedy zaczynam tworzyć nowe foldery natychmiast po usunięciu starych, niektóre z nich są nadal zablokowane, ponieważ nie zostały jeszcze całkowicie usunięte. Otrzymuję wyjątek System.UnauthorizedAccessException: „Odmowa dostępu do ścieżki”.Używanie
Thread.Sleep(5000)
afterDirectory.Delete(path, true)
rozwiązuje ten problem. Absolutnie zgadzam się, że nie jest to bezpieczne i nie zachęcam nikogo do korzystania z niego. Chciałbym tutaj znaleźć lepsze podejście do rozwiązania tego problemu, aby poprawić moją odpowiedź. Teraz tylko podpowiadam, dlaczego ten wyjątek może się zdarzyć.źródło
Najpierw sprawdź ścieżkę, jeśli brakuje znaku dwukropka (:) lub nie ma go po literze dysku. Jeśli nie brakuje dwukropka, możesz sprawdzić, czy przyznano uprawnienia dostępu / zapisu dla tej ścieżki. Miałem ten sam problem i brakowało mi tylko okrężnicy, pozwolenia i wszystko inne było w porządku.
będzie działać dobrze, ale
da ci błąd odmowy dostępu.
źródło
Próbowałem użyć System.IO.File.OpenWrite (ścieżka)
i nie zadziałało, ponieważ przekazywałem OpenWrite () tylko ścieżkę do katalogu, ale wymaga to ścieżki do pliku, który chcesz zapisać. Tak więc pełna ścieżka zawierająca nazwę pliku. Rozszerzenie na końcu musi zostać przekazana do OpenWrite, aby uniknąć wyjątku UnauthorizedAccessException
źródło
Natknąłem się również na ten post, który dotyczy tego samego problemu. Wygląda na to, że plik jest używany i dlatego nie można w nim zapisywać. Chociaż nie jestem w stanie tego rozgryźć, który proces go wykorzystuje. Wylogowano innego użytkownika, który był zalogowany w tym polu, nie widzisz żadnych użytkowników, którzy go przechowują. Wszelkie szybkie wskazówki, jak znaleźć to samo.
Dzięki, Lakshay (programista)
źródło
Aby rozwiązać ten problem, postępuję zgodnie z podejściem Scotta Hanselmana w artykule Debugging System.UnauthorizedAccessException (często po którym następuje: Access to the path is denied) , kod z przykładem jest poniżej:
źródło