En programación, un esquema de identificador uniforme de recursos (URI) de archivo es un formato específico de URI , que se utiliza para identificar específicamente un archivo en un equipo host. Si bien los URI se pueden utilizar para identificar cualquier cosa, existe una sintaxis específica asociada con la identificación de archivos. [1] [2]
Un URI de archivo tiene el formato
archivo:// host / ruta
donde host es el nombre de dominio completo del sistema en el que se puede acceder a la ruta y path es una ruta de directorio jerárquica con el formato directorio / directorio /.../ nombre . Si se omite host , se toma como " localhost ", la máquina desde la que se interpreta la URL. Tenga en cuenta que al omitir host, no se omite la barra (mientras que "archivo:///piro.txt" es válido, "archivo://simpen.txt" no lo es, aunque algunos intérpretes logran manejar esto último).
RFC 3986 incluye información adicional sobre el tratamiento de los segmentos ".." y "." en las URI.
file:/path
(sin nombre de host), file:///path
(nombre de host vacío) o file://hostname/path
.file://path
(es decir, dos barras, sin nombre de host) nunca es correcto, pero se usa a menudo.Existen dos formas de representar los nombres de archivo UNC de Windows (como \\server\folder\data.xml
). Ambas se describen en el Apéndice E de RFC 8089 como "no estándar". La primera forma (denominada aquí formato de 2 barras) consiste en representar el nombre del servidor utilizando la parte Authority del URI, que luego se convierte en file://server/folder/data.xml
. La segunda forma (denominada aquí formato de 4 barras) consiste en representar el nombre del servidor como parte del componente Path , de modo que el URI se convierta en file:////server/folder/data.xml
. Ambas formas se utilizan activamente. Microsoft .NET (por ejemplo, el método new Uri(path)
) generalmente utiliza la forma de 2 barras; Java (por ejemplo, el método new URI(path)
) generalmente utiliza la forma de 4 barras. Cualquiera de las dos formas permite utilizar con éxito las operaciones más comunes en los URI (resolver los URI relativos y desreferenciar para obtener una conexión con el archivo remoto). Sin embargo, debido a que estas URI no son estándar, algunas operaciones menos comunes fallan: un ejemplo es la operación normalizar (definida en RFC 3986 e implementada en el java.net.URI.normalize()
método Java) que se reduce file:////server/folder/data.xml
a la forma inutilizable file:/server/folder/data.xml
. [6]
Aquí hay dos ejemplos de Unix que apuntan al mismo archivo /etc/fstab :
archivo://localhost/etc/fstabarchivo:///etc/fstab
El entorno KDE utiliza URI sin un campo de autoridad:
archivo:/etc/fstab
A continuación se muestran algunos ejemplos que pueden ser aceptados por algunas aplicaciones en sistemas Windows, haciendo referencia al mismo archivo local c: \ WINDOWS \ clock.avi
archivo://localhost/c:/WINDOWS/clock.aviarchivo:///c:/WINDOWS/clock.avi
Aquí está la URI tal como la entiende la API de Windows Shell: [7]
archivo:///c:/WINDOWS/clock.avi
Tenga en cuenta que la letra de la unidad seguida de dos puntos y una barra es parte del URI de archivo aceptable.
En los sistemas Microsoft Windows, los dos puntos normales (:) después de la letra de un dispositivo a veces se han reemplazado por una barra vertical (|) en las URL de archivos. Esto reflejaba la sintaxis original de la URL, que hacía que los dos puntos fueran un carácter reservado en una parte de la ruta.
Desde Internet Explorer 4 , las URI de archivos se han estandarizado en Windows y deben seguir el siguiente esquema. Esto se aplica a todas las aplicaciones que utilizan URLMON o SHLWAPI para analizar, obtener o vincular URI. Para convertir una ruta en una URL, utilice UrlCreateFromPath
, y para convertir una URL en una ruta, utilice PathCreateFromUrl
. [7]
Para acceder a un archivo "el archivo.txt", se podría utilizar lo siguiente.
Para una ubicación de red:
archivo://nombredehost/ruta/al/archivo%20.txt
O para un archivo local, se omite el nombre de host, pero no la barra (observe la tercera barra):
file:// / c:/ruta/al/archivo%20.txt
Esto no es lo mismo que proporcionar la cadena "localhost" o el punto "." en lugar del nombre de host. La cadena "localhost" intentará acceder al archivo como ruta UNC\\localhost\c:\path\to\the file.txt
, lo que no funcionará ya que los dos puntos no están permitidos en un nombre de recurso compartido. El punto "." hace que la cadena se pase como \\.\c:\path\to\the file.txt
, lo que funcionará para archivos locales, pero no para recursos compartidos en el sistema local. Por ejemplo, file://./sharename/path/to/the%20file.txt
no funcionará, porque hará que sharename se interprete como parte del espacio de nombres DOSDEVICES, no como un recurso compartido de red.
El siguiente esquema describe aproximadamente los requisitos.
Utilice las funciones proporcionadas si es posible. Si debe crear una URL mediante programación y no puede acceder a SHLWAPI.dll (por ejemplo, desde un script u otro entorno de programación donde no estén disponibles las funciones equivalentes), el esquema anterior le resultará útil.
Para ayudar a la base instalada de aplicaciones heredadas en Win32, PathCreateFromUrl
reconoce ciertas URL que no cumplen estos criterios y las trata de manera uniforme. Estas se denominan URL de archivo "heredadas", en contraposición a las URL de archivo "en buen estado". [8]
En el pasado, una variedad de otras aplicaciones han utilizado otros sistemas. Algunas agregaron dos barras adicionales. Por ejemplo, la ruta UNC \\remotehost\share\dir\file.txt
se convertiría file:////remotehost/share/dir/file.txt
en lugar de "healthy" file://remotehost/share/dir/file.txt
.
Las URL de archivos rara vez se utilizan en páginas web de Internet pública, ya que implican que existe un archivo en el host designado. El especificador de host se puede utilizar para recuperar un archivo de una fuente externa, aunque no se especifica ningún protocolo específico de recuperación de archivos; y su uso debería generar un mensaje que informe al usuario de que no hay ningún mecanismo disponible para acceder a esa máquina.