2012-06-26 26 views
12

Geçersiz Dizinler oluşturan bir uygulama var ... örn. c:\Program Files\somedirectory. - periyot, dizin adının bir parçasıdır.Delphi: Geçersiz Klasör Adını Değiştirme

Şimdi delphi'de bir dosyayı yeniden adlandırmakla ilgili bildiğim her şeyi denedim.

  • RenameFile (dosya1, dosya2)
  • MoveFile (File1, File2)
  • vs ...

Ben kısa yolunu ExtractShortPathName pencereleri elde denedi ama bu sadece boş bir dize döndürür . (commandPrompt aramak için: "ShortOldName NewName ADINI")

Şimdi ben cmd bunu yapmak elle biliyorum ama ben bütün dosyalar arasında gitmek için zaman harcamak hakkında değilim ve bunu;)

Ben ShellExecute burada kullanıyor en iyi yöntem değil biliyorum

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

:

İşte benim kod parçasıdır. Sadece işe yaramaz. Daha sonra optimizasyon ve doğru Delphi kodlaması konusunda endişeleneceğim.

Yani sorum şu: Geçersiz bir dizinin yeniden adlandırılmasına izin verecek bir işlevden haberi olan var mı?

cevap

16

Eğer özel bir şekilde klasörün adını geçirmek takdirde standart Windows API işlevi MoveFile() kullanabilirsiniz:

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

yerine

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

Daha o MSDN üzerinde bulunabilir hakkında "Naming Files, Paths, and Namespaces" konusu altında. Özellikle, dosya adlarına sondaki noktaların yerleştirilmesine karşı öneride bulunduğunu unutmayın.

+0

Mükemmel çalıştı. Teşekkür ederim! Her yerde arandı. SO'nın hayal kırıklığına uğratmayacağını biliyordum. –