2009-11-03 15 views
5

Estoy buscando un personaje para usar un delimitador de nombre de archivo (estoy almacenando varios nombres de archivo en una cadena de texto plano). Windows parece no permitir :, ?, *, <, >, ", |, / y \ en los nombres de archivo. Obviamente, \ y / no se pueden usar, ya que significan algo dentro de una ruta. ¿Hay alguna razón por la cual alguno de esos otros no debería ser usado? Solo estoy pensando que, al igual que / o \, esos otros caracteres no permitidos pueden tener un significado especial que no debería suponer que no estarán en los nombres de ruta. De esos otros 7 personajes, ¿hay alguno definitivamente seguro o definitivamente inseguro de usar para este propósito?Columna/Asterisco como un delimitador de nombre de archivo?

+0

¿por qué crear problemas para usted? vaya con los comunes, como el guión "-" o los puntos "." – ghostdog74

+0

La mala noticia es que en muchos sistemas UNIX, el único carácter que no está permitido en un nombre de archivo es "/". Todos los demás son válidos (aunque podrían necesitar escaparse para esconderlos del caparazón, por ejemplo). –

+0

Puedes usar '/' en rutas UNIX (pero si haces esto eres Satanás). Casi lo único que no puedes usar es nulo. – ratbum

Respuesta

11

Los caracteres : y " también se utilizan en las rutas. Colón es el delimitador de unidad de disco y las comillas se usan cuando los espacios son parte de una carpeta o nombre de archivo.

Los caracteres * y ? se utilizan como comodines al buscar archivos.

Los caracteres < y > se utilizan para redirigir la entrada y salida de una aplicación hacia y desde un archivo.

El carácter | se utiliza para la salida de tuberías desde una aplicación a la entrada de otra aplicación.

Elegiría el carácter de la tubería para separar los nombres de los archivos. No se usa en caminos, y su forma tiene una calidad de separación natural.

Una alternativa podría ser utilizar XML en la cadena. Hay un poco de sobrecarga y algunos personajes necesitan codificación, pero la ventaja es que puede manejar cualquier carácter y el formato se explica por sí mismo y está bien definido.

+0

'" 'no está permitido en una ruta: se considera un delimitador que rodea una ruta cuando contiene caracteres especiales, pero no forma parte de la ruta. –

+1

@Adrien: Ciertamente lo es. Se puede utilizar en todo el entorno. todo el camino o alrededor de un elemento en una ruta, como C: \ "Archivos de programa" \ Adobe. – Guffa

+0

@guffa: insisto, no lo es. Los dobles caracteres se utilizan como medio para escapar de caracteres especiales, espacios para ser precisos .son especialmente interpretados por el intérprete de comandos y el shell de Windows, pero no forman parte del nombre del archivo. ¿Pueden mostrarme una forma de crear un archivo cuyo nombre contenga comillas dobles, usando el símbolo del sistema o la API de Windows? –

0

En realidad es posible crear archivos mediante programación con todos los caracteres posibles excepto \. (Al menos, esto fue cierto al mismo tiempo y es posible que Windows haya cambiado su política desde entonces). Naturalmente, los archivos que contienen ciertos caracteres serán más difíciles de trabajar que otros.

¿Qué usaba para determinar qué caracteres permite Windows?

Actualización: El conjunto de caracteres permitido por Windows también lo determinan el sistema de archivos subyacente y otros factores. Hay un blog entry on MSDN que explica esto con más detalle.

+0

Si intenta cambiar el nombre de un archivo en el Explorador de Windows, aparece esa lista y le impide hacerlo. Simplemente asumí que era así en un nivel fundamental, pero ¿estás diciendo que no es así? – Smashery

+0

Hay muchas capas debajo de Explorer. :) He actualizado mi respuesta con más información. –

+0

No: separa un archivo en diferentes horquillas ... nombre: texto, nombre: datos, etc. ¿Y cómo se obtiene una barra en el nombre de un archivo en Windows? Estoy bajo la ilusión de que trata la barra diagonal y la diagonal inversa como equivalentes en el nivel de llamada del sistema. –

0

¿Por qué no utiliza ningún carácter con la combinación de teclas ALT como ‡ (Alt + 0135) como delimitador?

+0

¿Qué código de carácter sería? –

+2

Ese es un carácter legal en los nombres de archivo y no se puede usar como separador por ese motivo. – MSalters

1

He usado * en el pasado. El motivo de la portabilidad para Linux/Unix. Cierto, técnicamente también se puede usar en esos sistemas de archivos. En la práctica, todos los sistemas operativos comunes lo utilizan como un comodín, por lo que es bastante raro en los nombres de archivo. Además, las personas no se sorprenden si los programas se rompen cuando coloca un * en un nombre de archivo.

8

Windows usa el punto y coma como un delimitador de nombre de archivo: ;. mira la variable de entorno PATH, se rellena con ; entre los elementos de ruta.

(También, en Python, los os.path.pathsep vuelve ";", mientras se expande a ":" en Unix)

+0

Extraño, sin embargo, que puedo crear archivos con punto y coma en ellos. – Smashery

+0

eso es extraño, pero así son las cosas ... cuando agrega una ruta que contiene un ';' al% PATH%, la ruta agregada está rodeada por '" '(que no está permitido en una ruta). los nombres de archivo circundantes con '" 'y separarlos con'; 'es su solución. –

+0

Si rodea los nombres de archivo con '" ', puede usar casi cualquier otro carácter como delimitador, como una coma. Luego, puede utilizar una rutina de lectura CSV común para analizar la cadena en una matriz. –

0

Si todo lo que necesita es el apariencia de dos puntos y van a crear mediante programación, por qué no hacer uso de un carácter UTF-8 que solo parece como dos puntos?

Mi primera opción sería la Letra modificadora (U + A789), ya que es un personaje RTL típico y se parece mucho a dos puntos. Es lo que uso cuando necesito un DateTime completo en el nombre del archivo, como file_2017-05-04_16꞉45꞉22_clientNo.jpg

Me mantendría alejado de caracteres como la puntuación hebrea Sof Pasuq (U + 05C3), ya que es un personaje LTR y puede meterse con cómo un sistema alinea el nombre del archivo en sí.

Cuestiones relacionadas