Encontramos el hallazgo a este atasco, o por lo menos eso deseamos. Si continuas con inquietudes coméntalo y con placer te responderemos
Solución:
InvalidPathChars está en desuso. Use GetInvalidPathChars() en su lugar:
public static bool FilePathHasInvalidChars(string path)
return (!string.IsNullOrEmpty(path) && path.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0);
Editar: un poco más largo, pero maneja la ruta frente a los caracteres no válidos del archivo en una función:
// WARNING: Not tested
public static bool FilePathHasInvalidChars(string path)
bool ret = false;
if(!string.IsNullOrEmpty(path))
try
// Careful!
// Path.GetDirectoryName("C:DirectorySubDirectory")
// returns "C:Directory", which may not be what you want in
// this case. You may need to explicitly add a trailing
// if path is a directory and not a file path. As written,
// this function just assumes path is a file path.
string fileName = System.IO.Path.GetFileName(path);
string fileDirectory = System.IO.Path.GetDirectoryName(path);
// we don't need to do anything else,
// if we got here without throwing an
// exception, then the path does not
// contain invalid characters
catch (ArgumentException)
// Path functions will throw this
// if path contains invalid chars
ret = true;
return ret;
Tenga cuidado al confiar en Path.GetInvalidFileNameChars
, que puede no ser tan fiable como crees. Observe el siguiente comentario en la documentación de MSDN en Path.GetInvalidFileNameChars
:
los array devuelto por este método es no se garantiza que contenga el conjunto completo de caracteres que no son válidos en los nombres de archivos y directorios. El conjunto completo de caracteres no válidos puede variar según el sistema de archivos. Por ejemplo, en plataformas de escritorio basadas en Windows, los caracteres de ruta no válidos pueden incluir caracteres ASCII/Unicode del 1 al 31, así como comillas (“), menos de (<), greater than (>), barra vertical (|), retroceso (b), null ( ) y tabulador (t).
No es mejor con Path.GetInvalidPathChars
método. Contiene exactamente el mismo comentario.
Terminé tomando prestado y combinando algunas implementaciones internas de .NET para crear un método eficaz:
/// Determines if the path contains invalid characters.
/// This method is intended to prevent ArgumentException's from being thrown when creating a new FileInfo on a file path with invalid characters.
/// File path.
/// True if file path contains invalid characters.
private static bool ContainsInvalidPathCharacters(string filePath)
for (var i = 0; i < filePath.Length; i++)
return false;
Luego lo usé así, pero también lo envolví en un bloque de prueba/captura por seguridad:
if ( !string.IsNullOrWhiteSpace(path) && !ContainsInvalidPathCharacters(path))
FileInfo fileInfo = null;
try
fileInfo = new FileInfo(path);
catch (ArgumentException)
...
Te invitamos a sustentar nuestro cometido dejando un comentario o dejando una puntuación te lo agradecemos.