[c#] 경로에 대한 액세스가 거부 된 이유는 무엇입니까?


Answers

File.Delete 메서드 에 따르면 ...

UnauthorizedAccessException 는 4 가지 중 하나를 의미합니다.

  • 호출자에게 필요한 권한이 없습니다.
  • 이 파일은 사용중인 실행 파일입니다.
  • 경로는 디렉토리입니다.
  • 경로가 읽기 전용 파일을 지정했습니다.
Question

내 파일을 삭제하려고 할 때 문제가 발생하지만 예외가 발생합니다.

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());
         }
      }
}

또한 내가 삭제하려고하는 폴더가 네트워크 서비스에 대한 완전한 제어권을 가지고 있다는 사실을 기억해야합니다.

전체 예외 메시지는 다음과 같습니다.

System.UnauthorizedAccessException : 'C : \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg'경로에 대한 액세스가 거부되었습니다. C : \ Users \ gowdyn \ System.IO_File.Delete (String path) at System.IO .__에서 Error.WinIOError (Int32 errorCode, String maybeFullPath)를 하이브리드 .User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (Object sender, EventArgs e) Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs : 줄 242

어떤 아이디어?




사용자가 웹 사이트에 연결하려고하면 IIS는 IUSER_ComputerName 계정에 연결을 할당합니다. 여기서 ComputerName은 IIS가 실행되는 서버의 이름입니다. 기본적으로 IUSER_ComputerName 계정은 Guests 그룹의 구성원입니다. 이 그룹에는 보안 제한 사항이 있습니다. 해당 폴더에 대한 IUSER_ComputerName에 대한 그랜드 액세스를 시도하십시오.

Here 에 IIS 보안에 대한 답변이 아주 잘 설명되어있다.

희망이 도움이




공유 서버에서 새로 이동 한 웹 사이트에서 동일한 문제가 발생했습니다. 웹 호스트 패널 (DotNetPanel)을 통해 해결되면 "쓰기 권한 허용"이 true로 설정됩니다. 따라서 서버 구성을 살펴볼 가치가있는 모든 코드를 검토하기 전에 공유 서버에있는 경우 많은 시간을 절약 할 수 있습니다.




파일 속성을 확인하십시오. 읽기 전용이 선택되어 있으면 선택을 해제하십시오. 이것은 UnauthorizedAccessException의 개인적인 문제였습니다.




나는 서버에서 전개 한 후에도 이와 동일한 문제에 직면했다.

dirPath = Server.MapPath(".") + "\\website\\" + strUserName;
if (!Directory.Exists(dirPath))
{
    DirectoryInfo DI = Directory.CreateDirectory(dirPath);
}
string filePath = Server.MapPath(".") + "\\Website\\default.aspx";
File.Copy(filePath, dirPath + "\\default.aspx", true);
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal);

관리자를 포함한 다른 그룹에 IIS 권한을 부여하고 문제가 해결되었습니다.




폴더를 옮기거나 만든 후 폴더의 이름을 매우 빠르게 변경하려고 시도했을 때이 오류가 발생했습니다.

간단한 시스템. System.Threading.Thread.Sleep(500); 해결 :

void RenameFile(string from, string to)
{
   try
   {   
      System.IO.File.Move(from, to)      
   }   
   catch 
   {  
       System.Threading.Thread.Sleep(500);      
       RenameFile(from, to);      
   }   
}



dest가 파일이어야 함을 알지 못해서 오류가 발생했습니다. 두 번째 매개 변수 (cmd에서 작동)로 폴더가 있습니다. Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. 왜냐하면 c # File.Move는 첫 번째 매개 변수뿐만 아니라 두 번째 매개 변수에도 파일을 원하기 때문에 두 번째 매개 변수로 디렉터리를 추가하면 디렉터리가있을 때 c:\crp 와 같은 파일을 작성하려고합니다 c:\crp c:\crp 라고합니다.

잘못된 File.Move(args[0],"c:\\crp");

그래서, 이것은 올바른 File.Move(args[0],"c:\\crp\\aa");

File.Copy 마찬가지입니다.




I / O 오류 또는 특정 유형의 보안 오류로 인해 운영 체제가 액세스를 거부 할 때 throw되는 예외입니다.

나는 똑같은 짓을했다. 파일이 HIDDEN이 아닌지 확인하십시오.




Links