¿Debería una variable de ruta de directorio terminar con una barra diagonal final?


Cuando se define una ruta a un directorio como una variable o constante, ¿debería terminar con una barra diagonal al final? ¿Qué es la convención?

pwd en unix muestra su directorio actual sin una barra final, mientras que la pestaña completa de cd /var/www/apps/ incluye la barra final, lo que me dejó inseguro.

Author: UnkwnTech, 2009-06-11

10 answers

No incluyo la barra final cuando, por ejemplo, defino un directorio para almacenar archivos. Eso es porque lo usaré como

$store_file = "$store_path/$file_id";

Siempre agregaré una barra diagonal final antes de usar una variable que se supone que contiene una ruta de directorio. Creo que es mejor agregar siempre uno que preguntarse si la barra diagonal está incluida.

 15
Author: Johan Soderberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 10:05:38

Voy con la barra final porque:

  1. "Si termina con una barra, es un directorio. Si no, es un archivo."es una convención fácil de recordar.

  2. Al menos en los sistemas operativos que uso comúnmente, doblar la barra no causa problemas, mientras que omitir la barra provoca problemas grandes. Por lo tanto, es más seguro poner la barra diagonal en la variable y usar "path path/file file" cuando se hace uso de ella.

 77
Author: Dave Sherohman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 11:34:45

Sí debería, como:

Pathname + filename = ubicación completa del archivo.

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

 9
Author: PaulJWilliams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 10:47:06

Cada vez que almaceno rutas de directorio, o las devuelvo desde las API, intento atenerme a la convención de mantener una barra diagonal final. Esto evita toda la ambigüedad de' es un archivo o un directorio'.

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

 4
Author: jerryjvl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 11:21:03

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

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

Por eso Termino mis rutas con una barra diagonal y mantengo los archivos como archivos.

 4
Author: DanMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 21:53:58

Tiendo a simplemente agregar la barra diagonal final, ya que es más que probable que use ese directorio para agregar/recuperar archivos...

En términos de referencia web, en realidad puede aumentar el rendimiento dejando la barra final en

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

 3
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 09:56:48

Sé que este es un hilo viejo, pero pensé en compartir lo que hago. Si es posible, normalmente permitiría ambos y haría algo como esto (si fuera PHP):

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

De esa manera, si el directorio está definido en un archivo de configuración, no importa si la siguiente persona que lo cambie incluye la barra diagonal final o no.

 3
Author: Paul F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-03 10:52:27

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 de un nombre de directorio entrará en conflicto con la forma en que dirname (..) funciona y entonces usted está atascado con el manejo de los dos casos, ya que no sabe si el nombre del directorio vino de un dirname(..) función o un contante definido con una barra diagonal.

En pocas palabras: No utilice una barra dirname(..) no lo hace.

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

Para otros lenguajes, verifique la función que extrae un nombre de ruta, y vea si está usando una barra diagonal final o no, luego adhiérase a la convención del lenguaje.

 3
Author: Basil Musa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 08:36:50

Sí, hay muchos sistemas de archivos que admiten archivos sin extensiones, por lo que siempre agregue la barra diagonal final para evitar problemas.

 2
Author: maxp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 10:49:53

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

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

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

 1
Author: Bevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-11 09:57:44