Обе функции делают одно и тоже, только вторая дополнена выводом ошибки и возможности прервать выполнение копирования при первой ошибке :)
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. копировать можно и просто одинокие файлы ;)