Eu tenho o seguinte código em meu serviço da web:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
Alguém pode me ajudar a resolver o problema com essa mensagem de erro da linha 2 do código.
O formato do caminho fornecido não é compatível.
A permissão na pasta é definida para acesso total a todos e é o caminho real para a pasta.
O ponto de interrupção me deu o valor de str_uploadpath
as C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
O que há de errado com essa string?
fileName
?fileName
está vazio.Respostas:
Em vez de usar
str_uploadpath + fileName
, tente usarSystem.IO.Path.Combine
:que retorna uma string.
fonte
using System.IO;
acima, então limpestr_uploadpath + fileName
e escrevaPath.Combine(str_uploadpath, fileName)
str_uploadpath
. Qual é o seu valor?Vejo que o originador descobriu que o erro ocorreu ao tentar salvar o nome do arquivo com um caminho inteiro. Na verdade, é suficiente ter um
":"
no nome do arquivo para obter esse erro. Se houver":"
no nome do arquivo (por exemplo, se você tiver um carimbo de data no nome do arquivo), certifique-se de substituí-lo por outro. Ie:fonte
Path.GetInvalidPathChars
mas nãoPath.GetInvalidFileNameChars
, como foi o meu caso.Para mim, o problema era um personagem de
""
incorporação da esquerda para a direita invisível ao olho humano .Ele ficou preso no início da string (logo antes do 'D'), depois que copiei e colei o caminho, na guia de segurança de propriedades do arquivo do Windows.
Portanto, essas, idênticas à primeira vista, duas linhas são realmente diferentes.
fonte
Se você estiver tentando salvar um arquivo no sistema de arquivos. Path.Combine não é à prova de balas, pois não ajudará se o nome do arquivo contiver caracteres inválidos. Aqui está um método de extensão que remove caracteres inválidos de nomes de arquivo:
E o uso pode ser:
fonte
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Entre outras coisas que podem causar este erro:
Você não pode ter certos caracteres na string PathFile completa.
Por exemplo, esses caracteres travarão a função StreamWriter:
pode haver outros caracteres especiais que o travem também. Descobri que isso acontece quando você tenta, por exemplo, colocar um carimbo de data e hora em um nome de arquivo:
Uma maneira de evitar esse problema é substituir caracteres problemáticos em NewFileOutS por caracteres benignos:
Espero que isso evite algumas dores de cabeça para alguém ...!
fonte
Se você receber este erro no PowerShell, provavelmente é porque você está usando
Resolve-Path
para resolver um caminho remoto, por exemploNeste caso,
Resolve-Path
retorna um objeto que, ao ser convertido em string, não retorna um caminho válido. Ele retorna o caminho interno do PowerShell:A solução é usar a
ProviderPath
propriedade no objeto retornado porResolve-Path
:fonte
Tente mudar:
Server.MapPath("/UploadBucket/Raw/")
para
Server.MapPath(@"\UploadBucket\Raw\")
fonte
MapPath
são inteligentes o suficiente para descobrir de qualquer maneira.@
na frente da string que escapa daqueles.Este era o meu problema, o que pode ajudar outra pessoa - embora não fosse o problema do OP:
Eu determinei o problema enviando meu caminho para um arquivo de log e descobrindo que ele não estava formatado corretamente. O correto para mim era simplesmente:
fonte
Usar o método Path.Combine ajuda? É uma maneira mais segura de unir caminhos de arquivo. Pode ser que esteja tendo problemas para unir os caminhos
fonte
Estou usando o (limitado) Construtor de expressões para uma variável para uso em uma tarefa de sistema de arquivos simples para fazer um archive de um arquivo no SSIS.
Este é meu hack rápido e sujo para remover os dois pontos para impedir o erro: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + ".xml"
fonte
Eu tive o mesmo problema hoje. O arquivo que eu estava tentando carregar no meu código foi aberto para edição no Excel. Depois de fechar o Excel, o código começou a funcionar!
fonte
Se o valor for um url de arquivo como file: // C: / qualquer, use a classe Uri para traduzir para um nome de arquivo regular:
var localPath = (new Uri(urlStylePath)).AbsolutePath
Em geral, usar a API fornecida é a prática recomendada.
fonte