Hay una serie de caracteres que no se pueden utilizar en el nombre de un archivo o carpeta en Windows. En esta publicación os dejo esa información, acompañada de alguna que otra recomendación que debemos tener en cuenta al nombrar archivos o carpetas en Windows.
Cuando estamos usando Windows y vamos a nombrar un archivo o carpeta e intentamos añadir uno de estos caracteres, el Explorador de Archivos nos muestra un mensaje en un globo, para hacernos saber los caracteres que no están permitidos.
En el caso de estar desarrollando alguna aplicación que genere, guarde o renombre ficheros o carpetas en disco, necesitamos normalizar el nombre que le vayamos a poner a ese fichero o carpeta para que no se produzca ningún error. Por ello, os dejo este recurso para que tengáis a mano los caracteres que no se pueden utilizar en el nombre de un archivo o carpeta en Windows. Esos caraceteres no permitidos son:
\ / : * ? " < > |
Además, tenemos que tener en cuenta que la longitud de la ruta no debe exceder de 260 caracteres, entre los que se incluye el nombre de la unidad de disco. Os dejo un ejemplo para entenderlo mejor
«C:/» + [nombre de archivo = 256 caracteres] + null terminator
Si estás programando en C#, dentro del espacio de nombres System.IO, hay dos métodos que nos pueden ayudar con la tarea de normalizar el nombre de ficheros y carpetas; estos métodos son Path.GetInvalidFileNameChars() y Path.GetInvalidPathChars(), con los que podríamos hacer la sustitución de todos esos caracteres no permitidos por un caracter válido como podría ser el guión bajo («_»). Os dejo un ejemplo de como podría hacerse:
//Normalizar el nombre de un fichero public static string NormalizeFileName(string fileName) { string invalidChars = System.Text.RegularExpressions.Regex.Escape( new string(System.IO.Path.GetInvalidFileNameChars()) ); string invalidRegStr = string.Format(@"([{0}]*\.+$)|([{0}]+)", invalidChars); return System.Text.RegularExpressions.Regex.Replace(fileName, invalidRegStr, "_"); } //Normalizar el nombre de una carpeta public static string NormalizeDirName(string dirName) { string invalidChars = System.Text.RegularExpressions.Regex.Escape( new string(System.IO.Path.GetInvalidPathChars()) ); string invalidRegStr = string.Format(@"([{0}]*\.+$)|([{0}]+)", invalidChars); return System.Text.RegularExpressions.Regex.Replace(dirName, invalidRegStr, "_"); }
Espero que te haya servido de ayuda esta entrada, si es así te agradecería un comentario o un compartir. Igualmente, si tienes cualquier duda o sugerencia, también puedes escribir un comentario.
Muchas gracias, es justo lo que estaba buscando!
De nada Miguel! Me alegro que te haya servido la publicación. Un saludo
No entendí.
Hola Oscar! Dime exactamente que es lo que no entediste para ver si te puedo ayudar.
CUÁL ES LA RAZÓN POR LA QUE NO SE PUEDEN USAR ESOS CARACTERES EN EL NOMBRE DE UN ARCHIVO O CARPETA EN WINDOWS?
Esos caracteres no permite Windows que se usen para nombrar ficheros o carpetas, porque son caracteres reservados del sistema y su uso tiene alguna utilidad. Por poner algún ejemplo:
– El asterisco (*) se utiliza en las búsquedas como comodín.
– Las barras \ y / se utilizan en las rutas de acceso a ficheros o carpetas dentro del sistema
Espero haberte ayudado. Un saludo
Hola, se puede tener una coma en el nombre del archivo en Windows?
Por ejemplo: ARCHIVO-1,1-2022.PDF
Gracias!
Hola Lulis! La coma es un carácter permitido para usar en los nombres de los ficheros en Windows. De todas formas, yo personalmente, es un carácter que no me gusta usar para nombrar ficheros o carpetas, usando en su lugar el guion para evitar problemas.
Un saludo