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 :

un vector de wchar_t


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut un vector de wchar_t
    Bonjour,

    Je développe un programme windows CE avec platform builder 5. J'ai récupéré un nom de fichier avec FindFirstFile.

    File.cFileName est de type WCHAR. Donc j'ai créé un vecteur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <vector>
    std::vector<WCHAR> fileNameVector;
    hSearch = FindFirstFile(_T("\\Storage Card\\*.bmp"), &File);
    fileNameVector.push_back(File.cFileName);
    j'obtiens l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\WINCE500\PBWorkspaces\gargamel\pic\pic.cpp(263) : error C2664: 'std::vector<_Ty>::push_back' : cannot convert parameter 1 from 'WCHAR [260]' to 'const WCHAR &'
    Pourtant, quand je fais la même chose avec un array au lieu du vector, ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WCHAR fileNameArray[MAX_FILES][MAX_LOADSTRING];
    ...
    wcscpy(fileNameArray[i], File.cFileName);
    i++;
    Ici, j'ai bien mon fileNameArray qui récupère le nom de fichier... Comment ça se fait ?? Je voudrais comprendre

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    bonjour.
    Tu ne montre pas la même chose....
    montre nous un code qui montre ton problème.
    Sinon sache qu'au lieux d'un vector<WCHAR> tu devrait utiliser un std::wstring.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    voici le code de la fonction au complet:

    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
     
    WCHAR fileNameArray[MAX_FILES][MAX_LOADSTRING];			
     
    void detectCard()
    {
    	std::vector<WCHAR> fileNameVector;
     
    	while(GetFileAttributes(_T("\\Storage Card")) == 0xFFFFFFFF)		Sleep(1000);
     
    	HANDLE hSearch;
    	WIN32_FIND_DATA File;
    	hSearch = FindFirstFile(_T("\\Storage Card\\*.bmp"), &File);
    	int i = 0;
    	do	{
    		fileNameVector.push_back(File.cFileName);//retourne une erreur
    		wcscpy(fileNameArray[i], File.cFileName);//ce que je veux faire (fonctionne), mais je veux des vector :(
    		i++;
    	}
    	while( FindNextFile(hSearch, &File) );
    	nbFiles = i;
    	FindClose(hSearch);
    }
    je compte mettre mon vector en variable globale une fois que ça fonctionne, pour pouvoir l'utiliser.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<WCHAR> fileNameVector;
    ce ne serait pas plustôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::wstring> fileNameVector;
    ce sera beaucoup mieux

    je compte mettre mon vector en variable globale une fois que ça fonctionne, pour pouvoir l'utiliser.
    EUh... la je ne vois pas l'avantage.... Je dirait même que ce n'est pas propre du tout...

  5. #5
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Bonjour,

    En fait, un WCHAR ne peut contenir qu'un seul caractère, c'est pour ça que tu chopes une erreur quand tu veux lui mettre un nom de fichier en entier.

    Essaie de trouver une autre solution, comme par exemple faire un vector de WHCAR*, une nouvelle classe ou utiliser les wstring ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Oui, j'ai choisi l'option wstring !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<wstring> fileNameVector;
    Par contre quand je veux visualiser mon code avec un wprintf, ça me retourne NULL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wprintf(L"voici ce que j'ai écris: %ls", fileNameVector.front());
    en fait ça m'affiche: voici ce que j'ai écris: NULL

    Comment ça se fait? :o

Discussions similaires

  1. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42
  2. vector et erase()
    Par gytr2 dans le forum SL & STL
    Réponses: 6
    Dernier message: 02/03/2004, 12h45
  3. equivalent Vector du jsp
    Par Djib dans le forum ASP
    Réponses: 4
    Dernier message: 05/12/2003, 08h07
  4. "vector" provoque "syntax error", malgré
    Par seenkay dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/08/2003, 03h21
  5. Réponses: 2
    Dernier message: 11/07/2003, 18h24

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