Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Fonction insertion de pièce jointe

    12 février 2019 à 21:26:17

    Bonjour à tous,

    je cherche à créer une petite fonction qui permettrait à l'utilisateur de choisir un fichier (de type variable, de nom variable) et de l'importer dans un répertoire spécifique, le temps de le traiter.

    J'ai un peu de mal avec le code puisqu'il dépende de plusieurs paramètres: - le type de fichier qui va être sélectionné par l'utilisateur, - le nom du fichier qui est variable.

    J'aimerais que l'ouverture de l'explorateur de fichiers se fasse sur le bureau de la session de l'utilisateur, qui bien sûr est aussi variable suivant qui est connecté.

    Pourriez-vous m'aiguiller? Pour l'instant, j'ai fait le code suivant mais ce n'est pas fameux... Le problème est que je voudrais une copie de ce fichier dans un répertoire du programme (temp-files/...) qui lui même dépend d'où l'utilisateur l'aura stocké. J'espère avoir été clair :-)

    Merci pour vos conseils

    QString path = QFileDialog::getOpenFileName(this, "Import file", QDir::homePath());
    
    QString cheminDeMonFichierSource = path;
    QString nouveauCheminDeMonFichierSource = QApplication::applicationDirPath();
    
    
    // Créé une nouvelle instance QFile qui contiendra le fichier source;
    QFile *monFichierSource = new QFile(cheminDeMonFichierSource);
    
    // Copie le fichier à l'emplacement souhaité. Renvoie true si la copie s'est bien exécutée, sinon false.
    if (monFichierSource->copy(nouveauCheminDeMonFichierSource))
    {
         // Le fichier a bien été copié.
    }
    else
    {
         // Le fichier n'as pas ét copié.
    }
    
    }



    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2019 à 10:05:53

      Hellow ! :)

      Une fois ton path récupéré avec getOpenFileName, tu peux construire un QFileInfo et récupérer le répertoire  ou est stocké le fichier sélectionné avec la méthode dir().

      const QString dirPath { QFileInfo(path).dir() };

      Si j'ai bien compris tu veux créer un dossier temp là où est le fichier, tu peux donc créer un QDir avec le répertoire récupéré au dessus et créer ton dossier temp avec mkdir("temp-files"). :)

      bool QDir::mkdir(const QString& dirName) const

      Pour copier le fichier tu as une méthode statique copy dans la classe QFile. ;)

      QFile::copy(path, newPath);

      Et enfin si tu veux ouvrir le dossier pour l'utilisateur tu peux utiliser ça :

      QDesktopServices::openUrl(QUrl::fromLocalFile(path));

      Je t'ai un peu tout donné en vrac mais tu devrais avoir tous les élements. :)


      -
      Edité par Maluna34 13 février 2019 à 10:06:34

      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2019 à 20:49:01

        Bonjour

        Merci pour les tuyaux je vais essayer ça dès que possible. Je ne souhaite pas créer de nouveau dossier, juste copier coller le fichier sélectionné vers un dossier qui existe déjà mais dont l'adresse absolue est variable. Il faudrait donc que je puisse le copier dans un dossier relatif à mon .exe (du genre "bin/filesTemp"

        Merci en tout cas pour l'aide.

        • Partager sur Facebook
        • Partager sur Twitter
          17 février 2019 à 11:03:30

          Rebonjour à tous,

          J'avance à petits pas mais je bloque toujours.

          J'arrive bien à copier un fichier mais je n'arrive pas à le coller avec la même extension qu'au départ. Voici le code:

          QString myOpenFile = QFileDialog::getOpenFileName(this, tr("Open mp3 file"),tr("C:\\"), tr("MP3 files (*.mp3);;All Files (*.*)"));
              // On référence l'objet file au fichier
              QFile file(myOpenFile);
              // On copie le fichier
              QFile::copy (myOpenFile, "C:/Users/XXXXX/Desktop/XXXXXX/");//Je pense que cette ligne fait défaut

          En fait j'aimerais copier le fichier que l'utilisateur sélectionne (qui possède des extensions diverses .doc,.txt etc...) dans un dossier se situant dans le programme de l'appli (du genre bin/).

          Visiblement, je m'y prends mal pour récupérer l'extension du fichier.

          Vous avez des idées?

          Merci

          Après reflexion j'ai trouvé ce code qui fonctionne:

              QString myOpenFile = QFileDialog::getOpenFileName(this, "Import file","C:/","All Files (*.*)");
              QFile initFile(myOpenFile);
              QString endFile= "files_temp/" % QFileInfo(myOpenFile).fileName();
              initFile.copy(myOpenFile, endFile);

          Vous savez comment faire en sorte que l'explorateur s'ouvre sur le bureau de l'utilisateur connecté (c'est un poste multi-utilisateurs) ?

          -
          Edité par Marindodouss 17 février 2019 à 11:38:20

          • Partager sur Facebook
          • Partager sur Twitter

          [Qt] Fonction insertion de pièce jointe

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown