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.

Caracteres que no se pueden utilizar en el nombre de un archivo o carpeta en Windows

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.