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

C++ Discussion :

Copie de données synchrone


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 31
    Par défaut Copie de données synchrone
    Bonjour a tous

    Je recherche un appel qui permet une copie de fichier synchrone.

    Pour l'instant j'utilise copifile.
    Si quelqu'un connait un appel synchrone pour une copie de fichier simple

    Merci par avance!

  2. #2
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    copifile ??? connait pô...
    Si ça vient d'une api système (comme CopyFile sous win32), tu devrais poster dans le forum approprié.
    De toute façon, pourquoi veux-tu changer ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 31
    Par défaut
    Il s'agit bien de copyfile

    je dois effectuer des traitements juste apres la copie.
    Ces traitements echouent car la copie n'est pas terminée.

    Du coup je cherche un appel synchrone permettant de copier des fichiers d'un emplacement vers un autre!

    merci par avance pour vos rpéonses!

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    T'ouvres le fichier de lecture.
    Tu créés le fichier de destination et tu l'ouvres.
    Tant que le fichier n'est pas vide
    ..Tu lis N octets et tu les recopies
    Tu fermes le fichier de destination
    Tu fermes le fichier de lecture.

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Loufoque : c'est sûr, ça marche, mais ça risque d'être sacrement long sur des fichiers un peu important...

    CopyFileEx permet de preciser une fonction de callback...

    En te servant de ça, tu peux faire attendre ton processus jusqu'a que la fonction de callback le previenne que la copie est finie

    https://msdn2.microsoft.com/en-us/library/aa363852.aspx

  6. #6
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Je m'étais jamais rendu compte que CopyFile rendait la main avant d'avoir copiée entièrement le fichier... ça me parait bizarre...
    sinon tu as SHFileOperation aussi.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 31
    Par défaut
    merci louffoque mais je crois que je vais choisir la soluce de buzzkaido ... Je vous tiens au courant...

  8. #8
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Et bien en lisant l'énoncé du problème... c'est plutôt loufoque qui a raison je trouve S'il te faut explicitement une copie synchrone, pourquoi utiliser une fonction asynchrone pour finalement la rendre synchrone avec une attente ... ?
    Surtout que ce n’est pas le code de copie d'un fichier qui va nous demander beaucoup d'effort... Un truc de ce genre ça devrait suffire non ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      ifstream iFile("C:/toto");
      ofstream oFile("C:/titi");
      oFile << iFile.rdbuf();
      oFile.close();
      iFile.close();

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Loufoque : c'est sûr, ça marche, mais ça risque d'être sacrement long sur des fichiers un peu important...
    Parce que tu crois que y'a un moyen de copier un fichier autrement ?

  10. #10
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Ben octet par octet (ou paquet d'octet par paquet d'octet) à un niveau elevé (une boucle en C++ par exemple) ça n'a quand meme pas grand chose à voir avec la même chose à un niveau système.

    En gros, en C++ à chaque lecture de paquet d'octet, le système va attendre que le disque se positionne, qu'il qoit prêt, qu'il remplisse un buffer... avant d'envoyer un paquet d'octet en RAM.

    A chaque ecriture, pareil.

    Avec une opération au niveau du système, toutes ces opérations (qui sont longues par rapport au temps de lecture effectif des données du disque) ne sont faites qu'une fois, en début de boucle.

    Et je ne suis même pas sûr que les données transitent par la RAM dans ces cas là.

    Essaie de copier octet par octet un fichier de 10Mo et tu verras...


    EDIT :

    Avec la méthode de superspag, je ne sais pas, je n'ai jamais essayé de coder ça comme un transfert de flux... mais y'a moyen que ce soit une bonne solution intermédiaire.

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    En gros, en C++ à chaque lecture de paquet d'octet, le système va attendre que le disque se positionne, qu'il qoit prêt, qu'il remplisse un buffer... avant d'envoyer un paquet d'octet en RAM.

    A chaque ecriture, pareil.

    Avec une opération au niveau du système, toutes ces opérations (qui sont longues par rapport au temps de lecture effectif des données du disque) ne sont faites qu'une fois, en début de boucle.
    Ah ouais, donc le système ne permet plus à d'autres processus de s'executer et d'utiliser le disque ?

    Et je ne suis même pas sûr que les données transitent par la RAM dans ces cas là.
    Si elles ne transitent pas par la RAM c'est que tu copies octet par octet, et non par paquets d'octets. Ça n'en sera que bien plus lent.

Discussions similaires

  1. Pb Access et copie de données
    Par guiboule dans le forum Access
    Réponses: 1
    Dernier message: 27/07/2006, 14h00
  2. [JTextArea] Copie de données - optimisation
    Par Djakisback dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/03/2006, 13h21
  3. [VBA-E] Problème de copie de données
    Par JM_stp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2006, 00h33
  4. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  5. Copie des données d'une table d'une base Interbase 6
    Par Djedjeridoo dans le forum InterBase
    Réponses: 6
    Dernier message: 02/02/2004, 09h39

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