2009-06-11 22 views

Respuesta

14

No incluyo la barra inclinada cuando, por ejemplo, defino un directorio para almacenar archivos. Esto es así porque lo voy a utilizar como

$store_file = "$store_path/$file_id"; 

siempre voy a añadir una barra diagonal antes de utilizar una variable que se supone que para mantener una ruta de directorio. Creo que es mejor siempre agregar uno que preguntarse si se incluye la barra final.

+19

No tener una barra inclinada significa que no está claro si la ruta en $ store_path es un archivo o un directorio. "/ tmp/store_data" ¿es un archivo o un directorio? – Darwin

+2

Al usar algo como la función [realpath()] (http://php.net/manual/en/function.realpath.php) de PHP, no imprimirá la barra inclinada. Su sistema y herramientas pueden dictar su convención. – jmbertucci

+6

Tener múltiples barras en cualquier lugar por lo general se interpretará como una sola barra inclinada. Así que incluso podrías tener algo como ''///' + $ root + '//' + $ file + '/'' y no importaría. Aunque tener la barra inclinada final es una buena forma de discernir si la ruta es un archivo o un directorio, sería mejor adjuntar a rutas como ''/' + $ root' en lugar de' $ root + '/' 'como No puede estar seguro de que la ruta anexa tiene una barra inclinada, pero puede estar relativamente seguro de que varias barras se interpretarán como una sola barra en la mayoría de los entornos. – Xtrinity

3

Cada vez que almaceno las rutas del directorio, o las devuelvo de las API, trato de seguir la convención de mantener una barra al final. Esto evita toda la ambigüedad '¿es un archivo o un directorio'?

Addendum:
Esto no pretende ser un sustituto para el uso de métodos que pueden tolerar bien una barra final o su ausencia. Incluso usando esta convención todavía uso siempre Path.Combine(...) y métodos similares.

+0

python: 'os.path.join (dir, subdir_or_file)' – IceArdor

3

tiendo a agregar la barra diagonal como soy más que probable que va a utilizar este directorio para agregar/recuperar archivos ...

En cuanto a la web de referencia que en realidad puede aumentar el rendimiento de salir de la barra final

http://www.netmechanic.com/news/vol4/load_no11.htm

0

nunca he visto una convención firme de cualquier manera.

Bastante seguro, sin embargo, que sea lo que sea que elija, alguien más estará 100% seguro de que debería ser al revés. Entonces, la mejor idea es tolerar que las cosas se establezcan de cualquier manera.

En el mundo .NET, Path.Combine() le ofrece una forma de manejar esto: hay equivalentes en otros entornos, desde archivos cmd en adelante.

8

Sí debe ser, como:

nombre de ruta + nombre de archivo = totalmente cualificado ubicación del archivo.

ASÍ, la barra entre el último directorio y el nombre del archivo debe estar al final de la ruta o al comienzo del nombre del archivo. Al prefijar los nombres de archivo con a/significa que debe tener esto en cuenta si solo desea abrir un archivo (es decir, si supone que hay un nombre de archivo no calificado en el directorio de trabajo actual).

+4

.. y no tenerlo en cuenta significa que posiblemente sea inadvertidamente meterse con /, y de esa manera la locura se encuentra en – JustJeff

2

Sí, hay muchos sistemas de archivos que admiten archivos sin ninguna extensión, por lo que siempre agregue la barra diagonal para evitar cualquier problema.

71

voy con la barra final, ya que: "Si se termina con una barra, que es un directorio Si no es así, se trata de un archivo."

  1. es una convención fácil de recordar.

  2. Al menos en los sistemas operativos que uso habitualmente, doblar la barra no causa problemas, mientras que omitir la barra hace que sean grandes. Por lo tanto, es más seguro colocar la barra en la variable y usar "$ ruta/$ archivo" al hacer uso de ella.

+6

Una ruta de directorio solo se puede distinguir de una ruta de archivo si la ruta del directorio tiene una barra inclinada. – Darwin

+3

Varias barras diagonales equivalen a una barra diagonal, a menos que la ruta comience con una barra doble. Consulte http://unix.stackexchange.com/questions/1910/how-linux-handles-multiple-path-separators-home-username-file – jdh8

+3

Además, al agregar una barra al final de vaariable, se permite "$ path $ file" en su lugar. de "$ path/$ file", lo que permite $ empty path, es decir, el directorio de trabajo actual. Pero nunca uses barra invertida en lugar de barra inclinada. – fantastory

4

Tal vez deberías pensar en lo que significaría su decisión de archivos. Si no incluye la barra al final de un nombre del directorio, tendrá que agregarlo al inicio del nombre del archivo.

Ahora, si por alguna razón falta la ruta que conduce al archivo al concatenar cadenas, terminas con algo como /filename que no es solo un archivo sino una ruta absoluta desde el directorio raíz (donde sea en ese contexto).

Es por eso que termino mis caminos con una barra y mantengo los archivos como archivos.

2

Sé que este es un hilo antiguo, pero pensé que compartiría lo que hago. Si es posible, me permito normalmente para ambos y hacer algo como esto (si era PHP):

$fullPath = rtrim($directory, '/') . '/filename.txt'); 

esta manera, si el directorio está definido en un archivo de configuración, no importa si la próxima persona para cambiarlo incluye la barra final o no.

2

En php, ya que la función dirname (__ FILE __) devuelve el nombre del directorio sin una barra al final. Tiendo a apegarme a esa convención.

De lo contrario, usar una barra al final del nombre de un directorio entrará en conflicto con la forma en que funciona el nombre dir (...) y luego tendrá que manejar los dos casos ya que no sabe si el nombre del directorio proviene función dirname (..) o un contant definido con una barra inclinada.

Resultado final: No utilice una barra inclinada ya que dirname (..) no lo hace.

// PHP Example 
dirname(__FILE__); // returns c:\my\directory without a trailing slash, so stick to it! 

Para otros idiomas, comprobar la función que extrae un nombre de ruta, y ver si se está utilizando una barra inclinada o no, a continuación, se adhieren a la convención del lenguaje.

+1

Una excepción: dirname ('/ test') = '/' - en lugar de devolver una cadena vacía, dirname devuelve una sola barra en este caso! Vea las notas [aquí] (http://php.net/manual/en/function.dirname.php). –

Cuestiones relacionadas