2012-11-14 16 views
5

Jaki jest najlepszy/najbardziej standardowy sposób zmiany nazwy pliku podstawowego danej ścieżki pliku w Qt przy zachowaniu katalogu i rozszerzenia?Zmień nazwę pliku podstawowego w Qt

Czy istnieje standardowy sposób, aby to zrobić, czy po prostu używam wyrażeń regularnych?

Powiedzmy mam:

/home/user/myfile.png 

i byłoby zmienione na:

/home/user/myfile-modified.png 

Odpowiedz

6

Zastosowanie QFileInfo analizować out aspekty ścieżki.

QFileInfo original("/home/user/myfile.png"); 
QString newPath = original.canonicalPath() + QDir::separator() + original.baseName() + "-modified"; 
if (!original.completeSuffix().isEmpty()) 
    newPath += "." + original.completeSuffix(); 

Ostrzeżenie: Jeśli nazwa pliku kończy się na ".", Ale nie ma rozszerzenia, spowoduje to usunięcie ".". Innymi słowy, nazwa /home/user/myfile. zostanie zmieniona na /home/user/myfile-modified. W przeciwnym razie powinno to zadziałać.

+0

Właściwie nie chcę przenosić samego pliku, chcę tylko wyprowadzić nową nazwę - na przykład mój program ładuje oryginał, wprowadza modyfikacje i zapisuje nowy plik na podstawie nazwy pliku oryginału, ale z ' -modyfikowany "dołączony. Więc 'QFile :: rename' nie jest tu potrzebny. – sashoalm

+0

Źle zrozumiesz. Oryginalna lokalizacja jest zachowywana za pomocą QFileInfo :: canonicalPath() i jest wymagana dla systemu plików, aby znaleźć lokalizację pliku, którą próbujesz edytować. QFile :: rename() nie może przenosić plików mimo to. – Phlucious

+0

Dodałbym wiersz kodu, aby sprawdzić, czy zmiana nazwy zakończyła się pomyślnie. QFile :: rename zawiedzie, jeśli zmodyfikowana nazwa pliku już istnieje. – Phlucious

1

nie testowane, ale to może działać:

const char* filePath = "/home/user/myfile.png"; 
QFileInfo file(filePath); 
QDir dir = file.dir(); 
QString baseName = file.baseName(); 
QString baseNameModified = ...; // insert here your logic for modifying filename 
QFileInfo fileModified(dir, baseNameModified); 
QString filePathModified = fileModified.filePath();