2012-06-26 23 views
12

Tengo una aplicación que crea directorios no válidos ... p. c:\Program Files\somedirectory. - el período es una parte del nombre del directorio.Delphi: cambio de nombre de una carpeta no válida

Ahora, he intentado todo lo que sé sobre el cambio de nombre de un archivo en Delphi.

  • renombrar ficheros (archivo1, archivo2)
  • MoveFile (archivo1, archivo2)
  • etc ...

que han intentado conseguir las ventanas de corto recorrido ExtractShortPathName pero esto sólo devuelve una cadena vacía . (para llamar en commandPrompt: "RENAME ShortOldName NuevoNombre")

Ahora sé que puedo hacer manualmente en cmd pero no estoy a punto de pasar el tiempo para ir a través de todos mis archivos y hago;)

aquí es un poco de mi código:

xshortname := ExtractFileName(ExtractShortPathName(ns + oldName)); 
    xNewName := newName; 

    cmdTxt := PWideChar('/C cd ' + ns); 
    cmdTxt2 := PWideChar(cmdTxt + '&&' + ' RENAME ' + xshortname + ' ' + #34 + xNewName + #34); 
    ShellExecute(0, nil, 'cmd.exe', cmdTxt2, nil, SW_SHOWNORMAL); 

sé shellexecute no es el mejor método a utilizar aquí. Solo estoy tratando de hacer que el apestoso trabaje. Me preocuparé por la optimización y la correcta codificación Delphi más adelante.

Así que mi pregunta es: ¿Alguien sabe de una función que me permita cambiar el nombre de un directorio no válido?

Respuesta

16

Puede utilizar la función API de Windows estándar MoveFile() si se pasa el nombre de la carpeta de una manera especial:

MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed'); 

en lugar de

MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed'); 

Más de ello se puede encontrar en MSDN bajo el tema "Naming Files, Paths, and Namespaces". Tenga en cuenta que específicamente aconseja no poner puntos finales en los nombres de los archivos.

+0

Funcionó perfecto. ¡Gracias! Buscado en todas partes Sabía que SO no me decepcionaría. –

Cuestiones relacionadas