2012-06-26 14 views
12

Ho un'applicazione che crea directory non valide ... ad es. c:\Program Files\somedirectory. - il periodo è una parte del nome della directory.Delphi: ridenominazione di una cartella non valida

Ora, ho provato tutto ciò che so sulla ridenominazione di un file in Delphi.

  • RenameFile (file1, file2)
  • MoveFile (File1, File2)
  • ecc ...

ho cercato di ottenere le finestre breve sentiero ExtractShortPathName, ma questo solo restituisce una stringa vuota . (chiamare commandPrompt: "RENAME ShortOldName NewName")

Ora so che posso fare manualmente in cmd, ma io non sto per passare il tempo di passare attraverso tutti i miei file e farlo;)

qui è un po 'del mio codice:

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); 

so ShellExecute non è il metodo migliore di utilizzare qui. Sto solo cercando di far funzionare il fetente. Mi preoccuperò dell'ottimizzazione e della corretta codifica Delphi in seguito.

Quindi la mia domanda è: qualcuno sa di una funzione che mi permetterà di rinominare una directory non valida?

risposta

16

È possibile utilizzare la funzione API standard di Windows MoveFile() se si passa il nome della cartella in un modo speciale:

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

invece di

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

più su di esso può essere trovato su MSDN sotto l'argomento "Naming Files, Paths, and Namespaces". Si noti che in particolare si consiglia di non inserire punti finali nei nomi dei file.

+0

Perfetto. Grazie! Cercato ovunque Sapevo che SO non avrebbe deluso. –

Problemi correlati