VError VProjectItemFolder::_MoveTo(const VFolder& srcFolder, VFolder& destFolder) { VError err = VE_OK; if (!destFolder.Exists()) err = destFolder.CreateRecursive(); else err = VE_UNKNOWN_ERROR; // TO DO ce n'est pas vrai : mais c'est pour le moment : 011008 // que faire : ecraser, fusionner, on attends les specs ! if (err == VE_OK) { for (VFolderIterator it_folder(&srcFolder, FI_WANT_FOLDERS | FI_WANT_INVISIBLES); it_folder.IsValid() && err == VE_OK; ++it_folder) { VFolder srcNewFolder(it_folder.Current()->GetPath()); VString srcNewFolderName; srcNewFolder.GetName(srcNewFolderName); VString destNewFolderPath; destFolder.GetPath(destNewFolderPath); destNewFolderPath += srcNewFolderName; destNewFolderPath += FOLDER_SEPARATOR; VFolder destNewFolder(destNewFolderPath); err = _MoveTo(srcNewFolder, destNewFolder); } for (VFileIterator it_file(&srcFolder, FI_WANT_FILES | FI_WANT_INVISIBLES); it_file.IsValid() && err == VE_OK; ++it_file) { VFile srcNewFile(it_file.Current()->GetPath()); VString srcNewFileName; srcNewFile.GetName(srcNewFileName); VString destNewFilePath; destFolder.GetPath(destNewFilePath); destNewFilePath += srcNewFileName; VFile destNewFile(destNewFilePath); VProjectItemFile projectItemFile; VURL srcURL = VURL(srcNewFile.GetPath()); VURL destURL = VURL(destNewFile.GetPath()); projectItemFile.MoveTo(srcURL, destURL); } } if (err == VE_OK) { err = srcFolder.Delete(true); } return err; }
VError VFolder::CopyTo( const VFolder& inDestinationFolder, VFolder **outFolder, FileCopyOptions inOptions) const { VError err = VE_OK; VFolder *folder = NULL; if (IsSameFolder( &inDestinationFolder) || inDestinationFolder.GetPath().IsChildOf( GetPath())) { StThrowFileError errThrow( this, VE_CANNOT_COPY_ON_ITSELF); errThrow->SetString( "destination", inDestinationFolder.GetPath().GetPath()); err = errThrow.GetError(); } else { VString name; GetName( name); folder = new VFolder( inDestinationFolder, name); if (folder != NULL) { if ( ( (inOptions & FCP_Overwrite) != 0) && folder->Exists() ) err = folder->Delete( true); if (err == VE_OK) err = CopyContentsTo( *folder, inOptions); } else { err = VE_MEMORY_FULL; } } if (outFolder != NULL) { *outFolder = folder; folder = NULL; } ReleaseRefCountable( &folder); return err; }