2015-05-05 3 views
2

У меня есть кусок кода для загрузки файла с сервера. Однако из-за ограничения сервера я не могу поместить файл .exe на сервер. Поэтому я переименую файл XXX.exe в XXX.alt (просто произвольное расширение) и помещаю его на сервер. Теперь мой код может скачать XXX.alt, но как я могу изменить имя файла из XXX.alt обратно в XXX.exe, когда в среде QT?как изменить расширение файла на qt

ответ

1

Просто используйте функцию rename от 'stdio.h'.

char oldname[] ="XXX.alt"; 
char newname[] ="XXX.exe"; 
result= rename(oldname , newname); 
if (result == 0) 
    puts ("File successfully renamed"); 
else 
    perror("Error renaming file"); 
+1

В Qt это будет 'QFile :: rename (const QString & oldName, const QString & newName)', хотя код c, который вы опубликовали, должен работать нормально. – drescherjm

+0

Вы оба правы. Благодарю. и я узнал, что нам даже не нужно ставить oldName. мы можем просто QFile (const QString & newName) –

0

Одним из решений является поиск последнего '.' и замена подстроки с этой позиции до конца на нужную подстроку.

Как это сделать, существует множество способов использования как std::string, так и QString, так как обе они поддерживают поиск символов в строке (и выполняют поиск от конца до начала), а также заменяют подстроки.

12

Используйте QFileInfo для получения пути без последнего расширения, а затем добавьте новое расширение.

QFileInfo info(fileName); 
QString strNewName = info.path() + "/" + info.completeBaseName() + ".exe"; 
+0

Я думаю, что это нужно разделитель: 'QString strNewName = info.path() + "/" + информация. completeBaseName() + ".exe"; 'В Linux путь, возвращенный из' QFileInfo :: path() ', не включает разделитель в конце. – Mitch

+0

@Mitch Спасибо. Исправлена. – drescherjm

0

предпочитают использовать BASENAME()

QFileInfo info(fileName); 
QString strNewName = info.path() + info.baseName() + ".exe"; 

QString QFileInfo::completeBaseName() const 
Returns file name with shortest extension removed (file.tar.gz -> file.tar) 

QString QFileInfo::baseName() const 
Returns file name with longest extension removed (file.tar.gz -> file) 
Смежные вопросы