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

Windows Discussion :

[Win Api32] [C] Problème de copie de fichiers


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut [Win Api32] [C] Problème de copie de fichiers
    Bonjour, un autre sujet a été ouvert sur le même thème ici (un peut plus bas dans ce forum) mais comme il est "Résolu" 'j'ai préféré en ouvrir un second.

    J'ai toujours le même problème, mon application plante au moment où j'essaie de définir les répertoires de sauvegarde et de récupération des dossiers que j'aimerais copier.

    J'ai corrigé mon code et maintenant j'utilise des TCHAR et les fonctions qui vont avec.
    Le programme plante éxactement à la première ligne de la fonction definirAdresseOrigine. J'ai recopié celle de Médinoc. J'ai bien fait l'allocation dynamique où il me conseille de la faire et je libère la mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LPTSTR definirAdresseOrigine(LPCTSTR dossier, LPCTSTR user)
    {
    	LPTSTR adresseFrom = NULL;
     
    	/* Calculer la longueur de chaîne à allouer, 
    	   caractère nul supplémentaire compris. */
    	size_t cchLength = _stprintf(_T("C:\\DOCUME~1\\%s\\%s\\*%c"), user, dossier, _T('\0'));
    J'ai seulement changé sctprintf par stprintf je ne trouvais pas la première fonction et j'ai pensé que c'était une faute de frappe...Mais avec une addition de strlen ça plante quand même.

    Comme j'utilise Codeblocks j'ai débugger mon code. Et a cette ligne j'option une erreur et voici le log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #0 77C0EFF9	wscanf() (C:\WINDOWS\system32\msvcrt.dll:??)
    
    #1 77C0F296	wscanf() (C:\WINDOWS\system32\msvcrt.dll:??)
    
    #2 0022FC10	??() (??:??)
    
    #3 00405266	??() (??:??)
    
    #4 00000000	??() (??:??)
    Ensuite le programme s'arrête.

    Une autre info, comme je l'avais dit dans mon premier sujet, je remplis la structure SHFILEOPSTRUCTURE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct _SHFILEOPSTRUCT {
        HWND hwnd;
        UINT wFunc;
        LPCTSTR pFrom;
        LPCTSTR pTo;
        FILEOP_FLAGS fFlags;
        BOOL fAnyOperationsAborted;
        LPVOID hNameMappings;
        LPCTSTR lpszProgressTitle;
    } SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

    Voici la doc de la Structure


    Si qq'un pouvait m'aider à trouver ce qui ne va pas ça serait sympa, j'ai l'impression de tourner en rond. Merci !

  2. #2
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Ça marche pas comme ça sprintf, elle prend un buffer en premier paramètre.
    Ajouter à la main le zéro terminal était une bonne intention mais ce n'est pas utile, une chaine littérale en contient déjà un.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TCHAR buffer[une certaine taille];
    size_t cchLength = _stprintf(buffer, _T("C:\\DOCUME~1\\%s\\%s\\*"), user, dossier);
    Mais ce n'est pas du C++ pur et c'est dangereux parce qu'on utilise un buffer à taille fixe, en C++ on pourrait faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string buffer = _T("C:\\DOCUME~1\\");
    buffer += user;
    buffer += _T("\\");
    buffer += dossier;
    buffer += _T("\\*");
    
    size_t cchLength = buffer.size();
    Et c'est toujours pas bien parce que le répertoire utilisateur est pas forcément dans "c:\Documents and Settings", le mieux c'est de lire la variable d'environement USERPROFILE ou SHGetFolderPath

  3. #3
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut
    et qu'est ce qui est bien ? (à part Linux et GTK+ )

    Pour le caractère nul supplémentaire il est là à cause le la structure :
    Each file name must be terminated by a single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom.
    Pour la fonction SHGetFolderPath

    Deprecated. Gets the path of a folder identified by a CSIDL value.
    Un peu d'aide SVP ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Tu as mal recopié mon code: Le premier appel n'est pas à _stprintf(), mais à _sctprintf()...

    Mais maintenant, tu peux utiliser cette version-là à la place de toute façon.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut
    Oui j'ai essayé cette fonction mais j'obtiens tjrs :
    undefined reference to '__sctprintf'
    et je ne la trouve pas pour vérifier à quelle bibliothèque elle appartient ... elle est référencée une fois je crois dans le site de windows et seulement mentionnée.. ou je cherche très mal.

  6. #6
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut
    Bon j'ai cru que ma version de XP était trop vieille (j'ai un viel XP sur une machine virtuelle) Mais la fonction n'est toujours pas reconnue sur mon portable avec Vista.
    J'ai vu des sources de tchar.h sur internet, et pas de _sctprintf ...
    Un vrai casse tête, c'est un jeu de piste ?

    J'ai réinstallé code::blocks, je pense que le bug vient de laà, maisil ne veut plus compiler... trop chaud, fatigue... je verrai ça demain.

Discussions similaires

  1. Problème de copie de fichier sur serveur
    Par Vincinho dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/04/2009, 14h51
  2. Problème de copie de fichier par FTP
    Par tpdm dans le forum AS/400
    Réponses: 3
    Dernier message: 31/07/2008, 15h37
  3. C# problème de copie de fichiers.
    Par Shypster dans le forum C#
    Réponses: 9
    Dernier message: 25/01/2008, 16h46
  4. [Système] problème de copie de fichier entre 2 serveurs
    Par HOUDEBINE dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2006, 16h13
  5. problème de copie de fichier...
    Par Pe04 dans le forum Langage
    Réponses: 5
    Dernier message: 22/03/2006, 10h17

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