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 :

Prob avec SHFILEOPSTRUCT


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut Prob avec SHFILEOPSTRUCT
    Salut à Tous.
    Lorsque je transmet un pointeur sur string pour pFrom, ça marche
    Lorsque je transmet une wString.c_srt() ça échoue, erreur 1400 "invalid handle"

    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
    
    /*
    
    	//======================================================================
    	//Première méthode avec un wchar_t pour pFrom et un wstring pour pTo
    	//Réussit
    	//===================================================================
    	wchar_t lpFrom[24]=L"ressources\\biplan.cli\0\0";
    	shfos.pFrom=lpFrom;
    	wstring sDest(L"test\\");
    	shfos.pTo=sDest.c_str();
    	shfos.fFlags=FOF_SILENT | FOF_NOCONFIRMATION; 
    	//copie des fichiers dans le répertoire
    	int retShfo=SHFileOperation(&shfos);
    	if(retShfo){
    		if(TEST){wcout<<"copyTemp: echec  "<<sDestFiles.c_str()<<" "<<GetLastError()<<endl;}//
    	}else{
    		if(TEST){wcout<<"copyTemp: succes  "<<sDestFiles.c_str()<<" "<<GetLastError()<<endl;}
    	}
    */
    
    
    	//==================================================================
    	//Deuxième méthode avec un wstring pour pFrom et pTo
    	//échoue GetLastError() renvoie 1400 invalid handle
    	//==================================================================
    	wstring sFrom(L"ressources\\biplan.cli\0\0");
    	shfos.pFrom=sFrom.c_str();
    	wstring sDest(L"test\\");
    	shfos.pTo=sDest.c_str();
    	shfos.fFlags=FOF_SILENT | FOF_NOCONFIRMATION; 
    	//copie des fichiers dans le répertoire
    	int retShfo=SHFileOperation(&shfos);
    	if(retShfo){
    		if(TEST){wcout<<"copyTemp: echec  "<<sDestFiles.c_str()<<" "<<GetLastError()<<endl;}
    	}else{
    		if(TEST){wcout<<"copyTemp: succes  "<<sDestFiles.c_str()<<" "<<GetLastError()<<endl;}
    	}
    Je suis perplexe, pTo accept la string.c_str(), et pas pFrom.
    Je teste les deux méthodes séparément, et après avoir vidé le dossier de destination.
    C'est gênant, car je voudrais vraiment utiliser une string pour constituer mes fichiers à copier.

    Qui peut m'aider?

    Merci à tous.

    Alain

  2. #2
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Le problème vient de c_str (voir le thread problème de débutant)
    c_str() retourne la réponse dans un buffer interne partagé entre les invocations. Dans ce cas, si on tient à utiliser les string, il; faut faire une copie de ce que retourne c_str avant d'invoquer toute autre fonction de l'API.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut
    Salut et merci de ta réponse.
    Justement, j'ai essayé et ça marche pas, sans doute parce que je suis trop débutant, et qu'il me manque quelques bases.

    J'ai fait:

    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
    wstring sBuffer4(L"ressources\\cap.exe\0");
    	//Essai avec une copie de la wstring
    	TCHAR buffer4[MAX_PATH];
    	for(size_t j=0; j<sBuffer4.size(); j++){
    		buffer4[j]=sBuffer4[j];
    	}
    	shfosPac.pFrom=buffer4;//La copie échoue parreil que la wstring
    	//shfosPac.pFrom=L"ressources\\cap.exe\0";//la constante elle réussit
    	shfosPac.pTo=sPathAppData.c_str();//Par contre, pTo accept la wstring!!!!
    	shfosPac.fFlags=FOF_SILENT | FOF_NOCONFIRMATION; 
    	//copie des fichiers dans le répertoire
    	if(SHFileOperation(&shfosPac)){
    		// SHFileOperation renvoie 0 en cas de succès!!!!    
    		if(TEST){wcout<<"copy2Cap: false "<<GetLastError()<<endl;}  
    	}else{
    		if(TEST){cout<<"copy2Cap: true "<<endl;} 
    	}
    Je teste alternativement la constante, et la copie de wstring, la constante réussit et la copie échoue.

    Je dois mal m'y prendre pour la copie de la wstring.cstr(). (je suis en unicode)

    Merci de ton aide.

    Alain

Discussions similaires

  1. [débutant] Prob avec Tree ctrl
    Par Devether dans le forum MFC
    Réponses: 3
    Dernier message: 24/03/2004, 11h36
  2. [composant][MX_2004_pro] prob avec scrollpane
    Par scorpiwolf dans le forum Flash
    Réponses: 6
    Dernier message: 12/01/2004, 20h18
  3. Prob avec dates delphi
    Par ericmart dans le forum ASP
    Réponses: 6
    Dernier message: 20/10/2003, 17h51
  4. prob avec utilisation de package
    Par martijan dans le forum Modules
    Réponses: 13
    Dernier message: 11/07/2003, 09h37
  5. Thread probs avec WaitFor()
    Par pixelrock dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/11/2002, 09h40

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