Estou apenas pensando: estou procurando uma maneira de validar se um determinado caminho é válido. (Observação: não quero verificar se um arquivo existe! Só quero comprovar a validade do caminho - então, se é possível que exista um arquivo no local) .
O problema é que não consigo encontrar nada na API .Net. Devido aos vários formatos e locais que o Windows suporta, prefiro usar algo nativo do MS.
Uma vez que a função deve ser capaz de verificar:
- Caminhos Relativos (./)
- Caminhos absolutos (c: \ tmp)
- UNC-Pathes (\ some-pc \ c $)
- Limitações de NTFS como o caminho completo de 1024 caracteres - Se não me engano, exceder o caminho tornará um arquivo inacessível para muitas funções internas do Windows. Renomear com o Explorer ainda funciona
- Caminhos de GUID de volume: "\? \ Volume {GUID} \ somefile.foo
Alguém tem uma função assim?
Respostas:
Experimente
Uri.IsWellFormedUriString()
:A string não tem escape correto.
A string é um Uri absoluto que representa um arquivo implícito Uri.
A string é um URI absoluto sem uma barra antes do caminho.
A string contém barras invertidas sem escape, mesmo se forem tratadas como barras.
A string representa um Uri absoluto hierárquico e não contém ": //".
O analisador para o Uri.Scheme indica que a string original não estava bem formada.
fonte
@"foo\bar\baz"
, que é um caminho relativo perfeitamente válido ...Ou use o FileInfo conforme sugerido em In C #, verifique se o nome do arquivo é possivelmente válido (não se ele existe) .
fonte
fonte
Não tive problemas com o código abaixo. (Caminhos relativos devem começar com '/' ou '\').
Por exemplo, eles retornariam falso:
E estes retornariam verdadeiros:
fonte
Você pode tentar este código:
Não tenho certeza se cobre todos os casos ...
fonte
O mais perto que cheguei foi tentando criá-lo e vendo se dá certo.
fonte
Existem muitas soluções boas aqui, mas como nenhuma delas verifique se o caminho está enraizado em uma unidade existente, aqui está outra:
Esta solução não leva em conta os caminhos relativos.
fonte
Obtenha os caracteres inválidos de
System.IO.Path.GetInvalidPathChars();
e verifique se sua string (caminho do diretório) os contém ou não.fonte
Directory.Exists?
fonte
fonte
Basta usar
fonte
Você pode tentar usar Path.IsPathRooted () em combinação com Path.GetInvalidFileNameChars () para se certificar de que o caminho está parcialmente correto.
fonte