Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: gil9red от Январь 10, 2014, 21:16



Название: Копирование директории с вложенными файлами и папками
Отправлено: gil9red от Январь 10, 2014, 21:16
Обе функции делают одно и тоже, только вторая дополнена выводом ошибки и возможности прервать выполнение копирования при первой ошибке :)

Код
C++ (Qt)
static void copyPath( const QString & oldPath, const QString & newPath )
{
   if ( QFileInfo( oldPath ).isDir() )
   {
       QDir().mkdir( newPath );
       foreach ( const QString & entry, QDir( oldPath ).entryList( QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot ) )
           copyPath( oldPath + QDir::separator() + entry, newPath + QDir::separator() + entry );
   } else
       QFile::copy( oldPath, newPath );
}
 

Код
C++ (Qt)
static bool copyPathE( const QString & oldPath, const QString & newPath, bool interruptCopyingWhenError = false, bool logError = true )
{
   bool result = true;
 
   if ( QFileInfo( oldPath ).isDir() )
   {
       QDir().mkdir( newPath );
       foreach ( const QString & entry, QDir( oldPath ).entryList( QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot ) )
       {
           const QString & entryOldPath = oldPath + QDir::separator() + entry;
           const QString & entryNewPath = newPath + QDir::separator() + entry;
           result = copyPathE( entryOldPath, entryNewPath );
 
           if ( !result && interruptCopyingWhenError )
           {
               if ( logError )
                   qDebug() << "Error copying: " << entryOldPath << " -> " << entryNewPath;
               break;
           }
       }
 
   } else
   {
       result = QFile::copy( oldPath, newPath );
 
       if ( !result && interruptCopyingWhenError && logError )
           qDebug() << "Error copying: " << oldPath << " -> " << newPath;
   }
 
   return result;
}
 

PS. копировать можно и просто одинокие файлы ;)