Existe um método para verificar se o caminho fornecido é o caminho completo? Agora estou fazendo isso:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
Mas deve haver uma maneira mais elegante de verificar isso?
c#
.net
validation
path
hs2d
fonte
fonte
IsPathRooted
: evitar acessar o sistema de arquivos ou lançar exceções para entrada inválida.IsPathRooted
, certamente não era nada significativo. AGetFullPath
linha foi incluída para que o caminho sendo avaliado pudesse ser observadoA condição acima:
false
na maioria dos casos em que o formato depath
é inválido (em vez de lançar uma exceção)true
apenas sepath
inclui o volumeEm cenários como o apresentado pelo OP, pode, portanto, ser mais adequado do que as condições nas respostas anteriores. Ao contrário da condição acima:
path == System.IO.Path.GetFullPath(path)
lança exceções em vez de retornarfalse
nestes cenários:System.IO.Path.IsPathRooted(path)
retornatrue
sepath
começa com um único separador de diretório.Finalmente, aqui está um método que envolve a condição acima e também exclui as possíveis exceções restantes:
EDIT: EM0 fez um bom comentário e resposta alternativa abordando o curioso caso de caminhos como
C:
eC:dir
. Para ajudar a decidir como você pode querer lidar com tais caminhos, você pode querer mergulhar fundo no MSDN -> aplicativos de desktop do Windows -> Desenvolver -> Tecnologias de desktop -> Acesso e armazenamento de dados -> Sistemas de arquivos locais - -> Gerenciamento de arquivos -> Sobre gerenciamento de arquivos -> Criação, exclusão e manutenção de arquivos -> Arquivos de nomenclatura, caminhos e namespaces -> Caminhos totalmente qualificados versus caminhos relativosfonte
Experimentar
Funciona tanto para caminhos UNC quanto locais.
Por exemplo
fonte
Pergunta antiga, mas mais uma resposta aplicável. Se você precisa garantir que o volume seja incluído em um caminho local, você pode usar System.IO.Path.GetFullPath () desta forma:
fonte
GetFullPath
acessa o sistema de arquivos e pode lançar uma série de exceções possíveis. Veja minha resposta ( stackoverflow.com/a/35046453/704808 ) para uma alternativa que ainda garante um caminho completo.Com base na resposta do weir : isso não lança para caminhos inválidos, mas também retorna
false
para caminhos como "C:", "C: dirname" e "\ path".Observe que isso retorna resultados diferentes no Windows e no Linux, por exemplo, "/ path" é absoluto no Linux, mas não no Windows.
Teste de unidade:
fonte
Para verificar se um caminho é totalmente qualificado (MSDN) :
É um pouco mais simples do que o que já foi proposto e ainda retorna falso para caminhos relativos ao drive como
C:foo
. Sua lógica é baseada diretamente na definição do MSDN de "totalmente qualificado" e não encontrei nenhum exemplo de mau comportamento.Curiosamente, no entanto, o .NET Core 2.1 parece ter um novo método
Path.IsPathFullyQualified
que usa um método internoPathInternal.IsPartiallyQualified
(localização do link exata em 17/04/2018).Para a posteridade e melhor autocontenção deste post, aqui está a implementação deste último para referência:
fonte
Esta é a solução que uso
Funciona da seguinte maneira:
fonte
C:\foo\..\foo
ouC:\foo\.\.\.
Chame a seguinte função:
Documento MSDN: Método Path.IsPathFullyQualified
A citação útil do documento MSDN é a seguinte:
fonte
Não tenho certeza do que você quer dizer com caminho completo (embora, supondo que você queira dizer não relativo a partir da raiz), bem, você pode usar a classe Path para ajudá-lo a trabalhar com caminhos de sistema de arquivos físicos, que devem abranger você para a maioria das eventualidades.
fonte