2012-06-26 8 views
12

Mam aplikację, która tworzy nieprawidłowe katalogi ... np. c:\Program Files\somedirectory. - kropka jest częścią nazwy katalogu.Delphi: zmiana nazwy nieprawidłowego folderu

Teraz próbowałem wszystkiego, co wiem o zmianie nazwy pliku w delphi.

  • RenameFile (plik1, plik2)
  • MoveFile (File1, File2)
  • etc ...

Próbowałem się okna krótkie ścieżki ExtractShortPathName ale to po prostu zwraca pusty ciąg . (zadzwonić commandPrompt: „Zmień nazwę ShortOldName newname”)

Teraz wiem, że mogę ręcznie zrobić w cmd, ale nie jestem zamiar spędzić czas, aby przejść przez wszystkie moje pliki i to zrobić;)

Oto nieco mojego kodu:

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

wiem ShellExecute nie jest najlepszą metodą, aby być tutaj używane. Po prostu staram się zmusić tego, żeby stinker zadziałał. Będę się martwić o optymalizację i prawidłowe kodowanie Delphi później.

Moje pytanie brzmi: Czy ktoś wie o funkcji, która pozwoli mi zmienić nazwę nieprawidłowego katalogu?

Odpowiedz

16

Można użyć standardowej funkcji Windows API MoveFile() jeśli podać nazwę folderu, w sposób szczególny:

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

zamiast

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

więcej na temat można znaleźć na witrynie MSDN pod tematem "Naming Files, Paths, and Namespaces". Zwróć uwagę, że wyraźnie odradza wstawianie kropek w nazwach plików.

+0

Działa perfekcyjnie. Dziękuję Ci! Przeszukiwane wszędzie. Wiedziałem, że nie zawiedzie. –