2009-06-23 8 views
11

¿Existe un método incorporado en .net para codificar las rutas de archivos de la misma manera que codificaría una url? Por ejemplo, si tengo caracteres ilegales en un nombre de archivo, como "lo que sea: lo que sea", me gustaría que codifique el ":" por lo que aún está allí, solo codificado para que el sistema lo acepte. Me gustaría hacer algo como Path.Encode(fileName)Codificación de rutas de archivos

¿Algo como esto por ahí?

Esto es lo que estoy haciendo. Estoy raspando wikipedia.org para un juego que he creado en www.wikipediamaze.com. Cuando hago el raspado de la pantalla, almaceno los resultados en un archivo en mi carpeta app_data que coincide con el nombre del tema actual del sitio de wikipedia en el que estoy. Por ejemplo, si estoy en el lugar:

http://www.wikipedia.org/wiki/Kevin_Bacon

Entonces raspe esa página, analizar, limpiarlo, etc., y luego caché en el disco para retireval más rápido después. Se almacena en la ubicación /App_Data/Kevin_Bacon (no file extension). Esto funciona muy bien a menos que esté en una página como

http://www.wikipedia.org/wiki/Wikipedia:About

tratando de crear un archivo en /App_Data/Wikipedia:About, obviamente, no funciona ya que la ':' carácter es ilegal en un nombre de archivo.

ACTUALIZACIÓN

Esto funciona muy bien para mí:

public static string EncodeAsFileName(this string fileName) 
    { 
     return Regex.Replace(fileName, "[" + Regex.Escape(        
       new string(Path.GetInvalidFileNameChars())) + "]", " "); 
    } 
+0

¿Puedo preguntar por qué quieres hacer esto? Puede ayudarnos a mí y a otros a determinar cuál es la solución adecuada. – Lazarus

Respuesta

1

No, me temo que no hay nada de lo que existe en el BCL.

Tendrá que escribir su propia función que reemplace los caracteres no válidos (iterando sobre la entrada y utilizando un StringBuilder, quizás). Sin embargo, el método System.IO.Path.GetInvalidFileNameChars() te ayudará a hacerlo.

Sin embargo, la solución más sencilla podría ser capturar la excepción que se produce cuando se especifica un carácter no válido dentro de la ruta y proporcionar comentarios al usuario.

1

¿Necesita los nombres de archivo a ser. exactamente como están en la url?

Si no es así, utilice los nombres de los archivos Base64.Cuando cree un archivo, convierta el nombre de archivo en base64 antes de escribir o leer el archivo.

static public string EncodeTo64(string toEncode) 
{ 
    byte[] bytes 
      = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode); 
    string stringBase64 
      = System.Convert.ToBase64String(bytes); 
    return stringBase64; 
} 

string fileName64 = Path.Combine(AppDataPath, EncodeTo64("Wikipedia:About")); 

Editar: Me di cuenta de que Base64 tiene el carácter '/' que es un caracter no válido para el nombre de archivo. Reemplace el '/' con '-' después de la conversión.

+0

Me gusta esta idea. La codificación de Base 64 no incluye ningún nombre de nombre de archivo ilegal? – Micah

Cuestiones relacionadas