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 :

Affichier contenu dossier en C, sous DOS


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Affichier contenu dossier en C, sous DOS
    Bonjour, je développe actuellement un programme sur un appareil de type lecteur de code à barres.

    http://us.ute.com/products_info.php?...pc2=72&pid=274

    J'utilise donc le compilateur, qui se nomme JOBGEN PLUS, fourni par le fabricant pour générer mon code et pouvoir dialoguer avec l'appareil.

    Celui ci tourne sur DOS 8.3 (donc pas de nom de fichiers de plus de 8 caractères sinon il m'affiche des noms courts).

    Pour faire simple, le code suivant navigue à la racine de l'appareil, ouvre chaque fichier trouvé si celui ci est un .txt, va lire et récupérer une info dans ce fichier et change le nom de celui ci avec ce qu'il a lu.

    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
     
    #include "dirent.h"
     
    _prog()
    {
        DIR* rep=NULL;
        struct dirent* lec=NULL;
        FILE* fichier=NULL;
        int fin=0;
     
      rep=opendir(".");
     
      if (rep!=NULL)
      {
        while (fin==0)
        {
          lec=readdir(rep);
     
          if (lec!=NULL)
          {
            if ((strcmp(lec->d_name,".")!=0)&&(strcmp(lec->d_name,"..")!=0)&&(strchr(lect-d_name,".txt")!=NULL))
            {
               fichier=fopen(lec->d_name,"r");
               fseek(fichier,35,SEEK_SET);
               fgets(_temp7,8,fichier);
               fclose(fichier);
               rename(lec->d_name,_temp7);
            }
          }
          else
          {
            fin=1;
          }
        }
        closedir(rep);
      }
    }
    dirent.h n'était pas inclus dans mon compilateur je l'ai donc rajoutée.
    _temp7 est une variable prédéclarée par mon système de type chaine de caractère.

    Au final, j'ai des erreurs qui me disent que _readdir(),_opendir(), closedir() sont introuvables.
    Après quelques recherches sur internet, je me rends compte que ces fonctions sont utilisées pour UNIX et que pour windows il faut utilisé le header windows.h avec les fonctions :
    "Sous Windows, on utilise les fonction FindFirstFile() et FindNextFile() en recherchant les fichiers nommés "*.*" (c'est-à-dire tous les fichiers, tous les dossiers). Le HANDLE retourné par FindFirstFile() doit être fermé dès qu'il n'est plus nécessaire grâce à la fonction FindClose(). Ces fonctions ne parcourent pas les sous dossiers. Le programme suivant liste le contenu du répertoire courant."

    Donc vais je droit dans le mur ?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 088
    Points
    43 088
    Par défaut
    ça doit fonctionner sous DOS, essayes d'ajouter :
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Alors, es-tu sous DOS (le vrai DOS, en 16 bits et tout) ou sur Windows en mode console?
    dirent.h n'était pas inclus dans mon compilateur je l'ai donc rajoutée.
    Ajouter un header ne fait pas magiquement apparaître les implémentations dans la bibliothèque standard.

    Sous le vieux compilateur pour DOS Microsoft QuickC, il y avait les fonction _dos_findfirst() et _dos_findnext() (avec probablement un équivalent à FindClose() aussi).
    Tu peux aussi essayer _findfirst() tout court.
    Tout ça est probablement déclaré dans <io.h>.
    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.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Désolé pour le retard, mais je n'avais pas de notification de réponses à ce sujet ....

    Citation Envoyé par chrtophe Voir le message
    ça doit fonctionner sous DOS, essayes d'ajouter :
    stdio.h est automatiquement ajouté à mon projet par le compilateur.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Alors, es-tu sous DOS (le vrai DOS, en 16 bits et tout) ou sur Windows en mode console?

    Ajouter un header ne fait pas magiquement apparaître les implémentations dans la bibliothèque standard.

    Sous le vieux compilateur pour DOS Microsoft QuickC, il y avait les fonction _dos_findfirst() et _dos_findnext() (avec probablement un équivalent à FindClose() aussi).
    Tu peux aussi essayer _findfirst() tout court.
    Tout ça est probablement déclaré dans <io.h>.
    Voila ce qu'on peut lire dans la doc du produit :
    Our best-selling HT630 rugged handheld computer is a powerful, no-frills approach to data collection. Running on a DOS operating system, the HT630 handheld computer is stripped down to the essentials for the most straightforward user experience possible. It simply does not get any easier than the HT630.

    Donc je peux répondre que je ne suis pas sous windows.

Discussions similaires

  1. Modification contenu d'un fichier sous dos
    Par bhe dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 05/06/2008, 19h01
  2. [Débutant] Supprimer un dossier sous DOS
    Par klug80 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 17/02/2008, 16h10
  3. sous DOS, rebooter la machine
    Par jbat dans le forum C
    Réponses: 12
    Dernier message: 03/11/2003, 09h44
  4. Mémoire insuffisante sous Dos
    Par Bubonik software dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 20/09/2003, 10h35
  5. Quel etait le secret de Rapid File, la bdd sous DOS
    Par Robert A. dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 27/05/2003, 04h53

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