pashazz 28.05.2010 16:07
Qt Software — Нужна помощь: копирование файлов в Qt
Сейчас занялся поддержкой игр на нескольких дисков в winegame. Делается это все через копирование файлов со всех дисков в одну папку.Пытаюсь копировать содержимое диска в папку:
Судя по всему, содержимое диска (QFile file (diskPath) даже не начинает копироваться, хотя он, естественно! существует.
Уточнение: мне нужно скопировать не саму папку диска (/media/cdrom которая), а ее содержимое
Просмотреть весь файл исх. кода (dvdrunner.cpp) можно здесь.
divius 28.05.2010 16:13 #
+ 2 -
Содержимое директории можно копировать только рекурсивно, использовать QFile для директории бесполезно, используйте QDir.
Рекурсивное удаление директории вместе со всеми файлами:
static bool clearAndRemoveDirectory(const QString & dir)
{
QDir dirObj(dir);
foreach (QString fileName, dirObj.entryList())
{
if (fileName == "." || fileName == "..") continue;
if (QFileInfo(dir+"/"+fileName).isDir())
{
clearAndRemoveDirectory(dir+"/"+fileName);
}
else
{
dirObj.remove(fileName);
}
}
if (!dirObj.rmdir(dir))
{
Debug::print(QString::fromUtf8("Не удалось удалить временную директорию %1").arg(dir));
return false;
}
return true;
}
Нехорошо использовать "/", ибо платформозависимо. Лучше dirObj.filePath(fileName).
Думаю, именно в этом продукте это не критично. Или есть предположение, что в скором времени wine понадобится для запуска игр под виндой? :)
Из приведённого кода не очевидно, что это про wine. Да и код лучше писать правильно, вдруг его кто-то захочет позаимствовать для более кроссплатформного проекта.
Видно из описания кода. Но вообще, ты прав, конечно, это я так шучу. :)
Все это решается лишь QDir::separator. Который я активно использую.
А мне больше нравится dirObj.filePath(fileName), это же короче, чем dir + QDir::separator() + fileName.