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 :

codeblocks (en C sous windows 8) _wstat _wstat64


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 69
    Billets dans le blog
    1
    Par défaut codeblocks (en C sous windows 8) _wstat _wstat64
    Bonjour,

    J'essaye de lire la taille d'un fichier mais la fonction _wstat (ou_wstat64) m'indique l'erreur "No such file or directory" alors que le fichier est bien présent (d'ailleurs la fonction fopen marche bien sur ce même fichier).
    Est-ce que vous auriez une suggestion s'il vous plait?

    Merci
    Mich

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    montre un peu ton code qui montre que _wstat ne fonctionne pas mais fopen si.
    Sinon, c'est surement un coup des papillons...

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 69
    Billets dans le blog
    1
    Par défaut
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <Wchar.h>
     
        int res;
        struct _stat64 filestat;
        extern int errno;
        u8 NameTab[] = "D:\\Temp\\test\\montest.DAT";
     
        res = _wstat64((const wchar_t *)NameTab, &filestat);
        if (res==-1)
            printf("errno %d\r\n", errno);
        else
            printf("st_size %d\r\n", (int)filestat.st_size);
     
     
        fid = fopen((const char *)NameTab, "rb");
        if (fid == NULL)
        {
            printf("erreur chemin fichier IN\r\n");
            return 0;
        }

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Effectivement avec ce code y avait des chances que ça marche pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    u8 NameTab[] = "D:\\Temp\\test\\montest.DAT";
     
    res = _wstat64((const wchar_t *)NameTab, &filestat);
    Tu passes un pointeur vers une chaîne de caractères sur 8 bits, à une fonction qui s'attend à recevoir une chaine de caractères "larges" (ce qui, sous Windows, signifie 16 bits).
    La fonction _wstat64 va donc recevoir une chaîne de où chaque paire de caractères est concaténée en un seul (par exemple le "D:" sera interprété comme un seul caractère large constitué des codes ASCII de la lettre D et du deux points concaténés).
    Ce qui est comique, c'est que normalement le compilateur doit t'engueuler (te dire un truc du style "Heu ... tu passes un pointeur sur char à une fonction qui attend un pointeur sur wchar_t ... Tu dois te tromper quelque part !") mais tu as inséré un cast pour ne pas voir cette erreur (ce qui rappelle une citation de Raymond Chen que quelqu'un ici a en signature).
    Faire un cast signifie "Oui compilateur, je sais que ça parait bizarre, mais t'inquiète pas, je sais très bien ce que je fais". Et ensuite tu es étonné que ça ne marche pas ?

    La solution, c'est soit d'utiliser une vraie chaîne de caractères larges, soit d'utiliser _stat64() plutôt que _wstat64().

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 69
    Billets dans le blog
    1
    Par défaut
    le probleme est que sous codeblocks j'ai bien un fichier Stat.h mais il est sous \codeblocks\mingw\include\sys\ et non pas sous \codeblocks\mingw\include\ comme le fichier Wchar.h donc codeblocks ne le trouve pas. Je ne sais pas a quoi sert ce repertoire sys d'autant plus que certains fichiers (time.h par exemple) sont presents dans les 2 repertoires mais les 2 fichiers ne sont pas identiques ...
    Est-ce qu'il y a une fonction connue pour transformer une chaine de caractere en une chaine de caractere large?

  6. #6
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Alors :
    - d'apres ce que je vois ici :
    http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx
    tu dois inclure <sys/types.h> et ensuite <sys/stat.h> pour pouvoir accéder à stat64(). Donc c'est NORMAL que ton stat.h se trouve dans un répertoire sys.

    Est-ce qu'il y a une fonction connue pour transformer une chaine de caractere en une chaine de caractere large?
    - La première qui me vient à l'esprit c'est MultiByteToWideChar() http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx mais je serais pas étonné qu'il existe plus simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. codeblocks (en C sous windows) mktime
    Par mich35 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/08/2014, 09h06
  2. codeblocks (en C sous windows) gestion du temps
    Par mich35 dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2014, 19h03
  3. Configurer Codeblocks pour gdk_threads_init sous Windows
    Par acryline dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 20/08/2010, 11h09
  4. Erreur dans codeblocks pour GTK sous Windows
    Par acryline dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 09/08/2010, 14h27

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