IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Copier un répertoire et son contenu

  1. #1
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut Copier un répertoire et son contenu
    Bonjour,

    J'aurai besoin de copier un répertoire et son contenu (avec éventuellement d'autres sous répertoire dedans) vers une destination entrée par l'utilisateur.
    Actuellement, j'utilise QFile::copy, et ca marche bien avec des fichiers, par contre, quand j'applique la même méthode sur un répertoire, j'obtiens une erreur : "Cannot open monchemin for input".

    Donc, ma question est : existe-t-il une méthode toute faite pour déplacer un répertoire, ou est-ce que je vais être obligé de me coder à la main ?
    En regardant la doc, je suis tombé sur QDir, par contre, visiblement il n'y a pas de méthode pour copier des répertoires complets.

    Merci d'avance !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    peut être avec QDir::rename si la destination est sur la même partition que l'origine

  3. #3
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Le truc, c'est que je veux dupliquer, pas déplacer.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    Exacte faut que j'apprenne à lire

  5. #5
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Bon, ben du coup je suis parti de la faq "comment parcourir un répertoire" et je me suis fait la copie à la main. Voici le résultat si ca peut interesser quelqu'un.
    Pour info je suis plutôt débutant en qt, j'ai donc peut-être écrit quelques énormités sans m'en rendre compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    /**
      * This method is used to copy a folder into an another folder.
      */
    int MainWindow::copyFolder(QString sourceDir, QString destinationDir) {
    	QString msgError = "";
     
    	// On déclare un QDirIterator dans lequel on indique que l'on souhaite parcourir un répertoire et ses sous-répertoires.
    	// De plus, on spécifie le filtre qui nous permettra de récupérer uniquement les fichiers du type souhaité.
    	QDirIterator dirIterator(sourceDir, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
     
    	// Variable qui contiendra tous les fichiers correspondant à notre recherche
    	QStringList fileList;
    	QString currentFileToCopy;
    	QString currentFileDest;
    	QString folderPart;
    	QString finalFolder;
    	int errorCreate = 0;
    	// Tant qu'on n'est pas arrivé à la fin de l'arborescence...
    	QCursor cursor(Qt::WaitCursor);
    	QApplication::setOverrideCursor(cursor);
    	while (dirIterator.hasNext()) {
    		// ...on va au prochain fichier correspondant à notre filtre
    		fileList << dirIterator.next();
    		//qDebug() << dirIterator.filePath();
    		currentFileToCopy = dirIterator.filePath().mid(currentFolder.length());
    		qDebug() << dirIterator.filePath() << " " << currentFileToCopy;
    		currentFileDest = destinationDir + currentFileToCopy;
    		folderPart = currentFileToCopy.mid(0, currentFileToCopy.lastIndexOf("/"));
    		qDebug() << "FolderPart=" << folderPart;
    		finalFolder = destinationDir + folderPart;
    		QDir dir(finalFolder);
    		qDebug() << "finalFolder=" << finalFolder;
    		qDebug() << "ErrorCreate=" << errorCreate;
    		if (!dir.exists()) {
    			if (!dir.mkdir(finalFolder)) {
    				if (errorCreate == 3) {
    					msgError = msgError + "...\n";
    					errorCreate++;
    				}
    				if (errorCreate <= 2) {
    					msgError = msgError + tr("Impossible to create folder : ") + finalFolder + "\n";
    					errorCreate++;
    				}
    			}
    		}
     
    		QFile currentQFile(dirIterator.filePath());
    		if (!currentQFile.copy(currentFileDest)) {
    			qDebug() << currentQFile.errorString();
    			if (errorCreate == 3) {
    				errorCreate++;
    				msgError = msgError + "...\n";
    			}
    			if (errorCreate <= 2) {
    				msgError = msgError + tr("Impossible to create file : ") + currentFileDest + ".\n";
    				errorCreate++;
    			}
    		}
    	}
    	cursor.setShape(Qt::ArrowCursor);
    	QApplication::setOverrideCursor(cursor);
    	if (!msgError.isEmpty()) {
    		QMessageBox::warning(this, tr("Extract error"), msgError, tr("&Yes"));
    	} else {
    		QMessageBox::about(this, tr("Extract finished"), tr("All files have been correctly extracted."));
    	}
    	return (0);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/09/2007, 18h09
  2. Réponses: 1
    Dernier message: 27/07/2006, 00h15
  3. Déplacer un répertoire et son contenu
    Par choubiroute dans le forum Langage
    Réponses: 6
    Dernier message: 28/04/2006, 12h59
  4. Réponses: 9
    Dernier message: 24/10/2005, 18h42
  5. Comment copier un répertoire et son contenu ?
    Par yoghisan dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 20/06/2004, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo