O acesso ao caminho é negado
Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)
dei o controlo total a esta pasta (savehere) a network service
e iis_iusrs
, até dei o controlo total a everyone
mas ainda assim consegui esta excepção.
Eu tentei dar acesso via explorer e via IIS manager, ainda sem sorte
18 answers
Você precisa descobrir no pool de aplicativos para o site Qual é a identidade com que ele está executando (por padrão este é Application Pool Identity
) e conceder que as permissões corretas.
Leia a mensagem com atenção. Você está tentando salvar para um arquivo que tem o mesmo nome que o diretório. Isso não pode funcionar, você não pode sobrepor um diretório preenchido com arquivos com um único arquivo novo. Isso causaria perda de dados não diagnosticável," o acesso ao caminho é negado " é o sistema de arquivos lutando de volta para evitar que isso aconteça.Acesso ao caminho 'C:\inetpub\wwwroot\mysite\images\savehere' é negado
A mensagem de excepção não é ideal, mas vem directamente do SO e são lançados em pedra. O framework muitas vezes adiciona verificações extras para gerar mensagens melhores, mas este é um teste caro em uma rede. O Perf também é uma característica.
Tens de usar um nome como 'C:\inetpub\wwwroot\mysite\images\savehere\mumble.jpg'. Considere O Caminho.Combine () para gerar de forma fiável o nome do caminho.
Eu estava tendo o mesmo problema ao tentar criar um arquivo no servidor (na verdade um arquivo que é uma cópia de um modelo).
Aqui está a mensagem de erro completa:
{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.
Adicionei uma nova pasta chamada Templates
dentro da pasta de aplicações IIS. Uma coisa muito importante no meu caso é que eu precisava dar a permissão de Escrita (Gravar) para o usuário IUSR naquela pasta. Você também pode precisar dar Network Service
e ASP.NET v$.#
a mesma permissão de Escrita.
Depois de fazer tudo isto funciona como esperado.
A solução era que o ficheiro a que eu estava a tentar aceder era readonly , uma vez que foi copiado de um ficheiro modelo que foi lido apenas.
Eu tenho este problema quando eu tento salvar o arquivo sem definir o nome do arquivo.
Código Antigo
File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));
Código De Trabalho
File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));
Qual é a identidade da sua aplicação para a aplicação Web em execução como, para resolver problemas, tente criar um novo App Pool com say Network Service como sua identidade e faça com que a sua aplicação web use o novo App Pool que criou e veja se o erro persiste.
A seguinte dica não é {[4] } uma resposta à pergunta original deste tópico, mas pode ajudar alguns outros utilizadores que acabam nesta página web, depois de cometerem o mesmo erro estúpido que acabei de cometer...
Eu estava a tentar obter um ASP.Net controlo de carregamento do ficheiro para enviar o seu ficheiro para um endereço de rede que continha uma " partilha escondida ", nomeadamente:\a minha rede trabalha para alguma direcção ou outra
Não percebi. Se eu executar a página web no modo de depuração em Estúdio Visual, funcionaria bem. Mas quando o projeto foi implantado, e estava rodando através de um usuário de Pool de aplicativos, ele se recusou a encontrar este diretório de rede.Eu tinha verificado em que Utilizador o meu site IIS estava a correr, dado a este utilizador permissões completas para esta pasta no servidor" MyNetworkServer", etc, mas nada funcionou.
A razão (claro!) é que apenas os administradores são capazes de" ver " essas unidades de compartilhamento escondidas. A minha solução era simplesmente ... criar uma partilha" normal " para\A Minha Rede Trabalha Para Alguma Direcção Ou Outra
E isto livrou-se do "acesso ao caminho"... é negado" erro. O FileUpload foi capaz de executar com sucesso o comandofileUpload.SaveAs(networkFilename);
Espero que isto ajude outros utilizadores que cometam o mesmo erro que eu !
Note também que se estiver a enviar ficheiros grandes (acima de 4Mb), então o IIS7 requer que modifique a web.ficheiro de configuração em dois locais . Clique neste link para ler o que você basta: A enviar ficheiros grandes ASP.Net
FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);
Resolvi com esta configuração:
IIS > Pools de aplicação > [o seu site] > configurações avançadas... > Identidade > accound > LocalSystem
FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
Mas em vez de usar o path, devo usar o ficheiro.Nome completo... Não sei se vai ajudar mais alguém, apenas a passar a minha própria experiência com este erro dado!
Muda a configuração da conta incorporada para a conta personalizada e introduz o nome de utilizador e a senha do outro servidor.
Mantenha a configuração como integrada (em vez do modo clássico).
Make Directory savehere to be virtual directory and give read/write permission from control panel
Tinha um directório com o mesmo nome que o ficheiro que eu estava a tentar escrever, para que as pessoas também possam olhar por isso.
Depois de várias invocações sem sucesso {[[0]}, corrigi esta situação com reiniciar a minha máquina.
Em retrospectiva, uma pega de arquivo aberta pode ter causado problemas.Eu criei uma dir virtual com permissão total e adicionei os arquivos de código e vídeo ffmpeg lá, então finalmente fez sentido, pois pode ser acessado por qualquer um.