varios tiempo parte nombres nombre mismo lista espacios eliminar como cambiar archivos archivo c++ winapi unicode filenames max-path

c++ - tiempo - como cambiar el nombre de un archivo en windows 10



En Windows, ¿cuándo debería usar el prefijo de nombre de archivo "////? //"? (5)

Encontré una biblioteca de ca para abrir archivos con un nombre de archivo Unicode. Antes de abrir el archivo, primero convierte el nombre de archivo a una ruta anteponiendo "//? /". ¿Hay alguna razón para hacer esto que no sea aumentar la cantidad máxima de caracteres permitidos en la ruta, según este artículo msdn ?

Parece que estas rutas "//? /" Requieren las versiones Unicode de la API de Windows y la biblioteca estándar.


Creo que lo primero a tener en cuenta es que "//? /" No hace que la ruta sea una ruta UNC. Fuiste más preciso la segunda vez cuando lo llamaste una ruta estilo UNC. Pero incluso entonces, la similitud solo proviene de tener dos barras diagonales inversas al inicio. Realmente no tiene nada que ver con UNC. Esto está respaldado por el hecho de que debe usar aún más caracteres para obtener una ruta UNC con el prefijo "//? /".

Creo que tienes toda la razón para usar ese prefijo. Levanta el límite de longitud máxima como se describe en el artículo que citó. Y solo se aplica a las rutas Unicode; las rutas que no son Unicode no pueden evitar el límite usando ese prefijo.

Una cosa a tener en cuenta es que el prefijo no está permitido para rutas relativas, solo para rutas absolutas. Es posible que desee comprobar que su biblioteca C respeta esa restricción.


He estado escribiendo código de Windows desde 1995, y aunque conozco ese prefijo, nunca encontré ningún motivo para usarlo. Aumentar la longitud de la ruta más allá de MAX_PATH parece ser la única razón para ello, y ni yo ni ninguno de los clientes de mis programas alguna vez lo han hecho, que yo sepa.


Sí, es solo para ese propósito. Sin embargo, es probable que vea problemas de compatibilidad si decide crear rutas sobre la longitud MAX_PATH. Por ejemplo, el shell del explorador y el símbolo del sistema (al menos en XP, no sé de Vista) no pueden manejar rutas de esa longitud y devolverán errores.


El mejor uso para este método probablemente no sea crear nuevos archivos, sino administrar archivos existentes, que alguien más pudo haber creado.

Administre un servidor de archivos que rutinariamente obtendría archivos con path_length > MAX_PATH . Verá, los usuarios vieron los archivos como H:/myfile.txt , pero en el servidor en realidad era H:/users/username/myfile.txt . Entonces, si un usuario creó un archivo con exactamente MAX_PATH caracteres, en el servidor era MAX_PATH+len("users/username") .

(Crear un archivo con caracteres MAX_PATH no es tan infrecuente, ya que cuando guarda una página web en Internet Explorer usa el título de la página como el nombre del archivo, que puede ser bastante largo para algunas páginas).

Además, al compartir una unidad (a través de la red o USB) con una Mac o una máquina Linux, puede encontrarse con archivos con nombres como con, prn o lpt1. Y de nuevo, el prefijo le permite a usted y sus scripts manejar esos archivos.


Además de permitir rutas más largas, el prefijo "//? /" También le permite usar archivos y nombres de directorios como "con" y "aux". Normalmente, Windows los interpretaría como dispositivos antiguos de DOS.