Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 10 Jul 2003 02:39:46

LeadFiner
Technicien G100
Lieu: Lisses (Essonnes 91)
Date d'inscription: 02 Feb 2002
Messages: 127
Site web

Recherche de fichiers

Je voulais savoir si quelqu'un avait une fonction "prete a l'emploi" qui rechercherait un fichier sur tous les lecteurs, l'ouvrirait et renverrait son file descriptor.

Pour l'instant je fais :

Code:

int OpenFile (uchar *file)
{
    struct find_t ffblk;
    unsigned i,maxdrives=1;

    for(i=1 ; i<=maxdrives && _dos_findfirst(file,FA_NORMAL,&ffblk)!=0; i++) _dos_setdrive(i,&maxdrives);

    int hfile =  open(file, O_RDONLY | O_BINARY);

    return hfile;
}

Voilou, ca fonctionne chez moi, mais si y'a des dossiers ou des lecteurs vides, ca marque erreur de lecture sur lecteur LETTRE:

Donc c'est pas genial. De plus, les fonctions _dos doivent prendre pas mal de place...

Merci.


LeadFiner

leadfiner@wanadoo.fr
http://perso.wanadoo.fr/leadfiner/

Hors ligne

 

#2 10 Jul 2003 03:14:09

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Recherche de fichiers

C'est à peu près comme ca que je procède aussi...

je fais une recherche de tous les fichiers d'un certain type (les .SMP, attention au copyright  lol ) dans tous les lecteurs avec les fonctions findfirst et findnext et je stocke leur nom dans un tab.
Ensuite si je veux en ouvrir un j'envoie son nom à une fonction qui va tenter de l'ouvrir dans chaque lecteur jusqu'a ce qu'il y parvienne, et qui me renvoie son "descriptor"...

En gros ca donne ca:

Code:

void map_choose(char* file)
{    // affiche une liste des maps disponibles
    // permet de choisir la map
    // et renvoie une chaine 'file' avec le nom de la map choisie
    // la chaine est vide si aucun smp n'est a charger ==> on quitte.
    char chemin[]="L:\*.SMP", tab_noms[10][15], tab_lect[10];
    int done;
    u_char compteur=0,choix=0,key=0;
    struct ffblk ff;

    /* recherche de tous les smp présents */

    for (; chemin[0]<='Q' && compteur<10 ; chemin[0]++)
    {
        done=findfirst(chemin,&ff,0);

        while(!done && compteur<10)
        {
                // enregistre le nom et le lecteur contenant du fichier
            sprintf(tab_noms[compteur],ff.ff_name);
            tab_lect[compteur]=chemin[0];

            compteur++;
            done=findnext(&ff);
        }
    }

...

(la suite de la fonction vous l'aurez pas tt de suite lol)

Et pour ouvrir:

Code:

FILE* open_file(char* nom)
{
    char source[20]="L:\";
    FILE* fichier=NULL;

    // concaténation des chaines 'source' et 'chemin'
    for (char i=0; nom[i]!='';i++) source[3+i]=nom[i]; 
    source[3+i]='';

    for (; source[0]<='Q' && fichier==NULL ; source[0]++) 
        fichier=fopen(source,"rb");

    return fichier;
}

Voila y'a sans doute mieux mais ca marche tres bien chez moi... (sauf que les dossiers ne sont pas encore supportés, mais ca risque de venir wink)

Pour éviter les plantages lorsqu'on fait une recherche dans un lecteur vide, il faut bricoler un peu avec les gestionnaires d'erreurs etc...

Je ne me souviens plus exactement de la syntaxe pour le C (voir les sources de dirxplor, merci superna wink), mais sinon pour le C++ ca donne ca:

Code:

int error_handler(int a,int b,int c,int d)
{
    d=a+b+c+d; // ca sert franchement a rien, mais au moins j'ai pas 4 warnings a la compil! :p
    hardresume(_HARDERR_FAIL);
    return 0;
}
int (*handler)(int,int,int,int)=error_handler;

//et au debut du main() on met:
harderr(handler);

Voila, maintenant si qqn a pondu des fonctions en asm ou quoi, ca m'intéresse aussi...  :P


Pensez à surveiller mes releases wink

Hors ligne

 

#3 10 Jul 2003 05:24:13

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Recherche de fichiers

"   d=a+b+c+d; // ca sert franchement a rien, mais au moins j'ai pas 4 warnings a la compil! tongue "
tiens un gars qui comme moi se prend plus la tete avec les warning du genre

lol


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#4 10 Jul 2003 08:35:58

LeadFiner
Technicien G100
Lieu: Lisses (Essonnes 91)
Date d'inscription: 02 Feb 2002
Messages: 127
Site web

Re: Recherche de fichiers

Merci pour l'aide... Je pense que je prendre la partie qui gere l'erreur...  smile


LeadFiner

leadfiner@wanadoo.fr
http://perso.wanadoo.fr/leadfiner/

Hors ligne

 

#5 10 Jul 2003 14:25:40

Superna
Ex-Trouvetou G100
Lieu: Sous Linux ^^
Date d'inscription: 01 Feb 2002
Messages: 2275
Site web

Re: Recherche de fichiers

regarde DirXplor encore une fois comme ça tu gerera les dossiers...
c les fonctions Dirent.h universelles (enfin Dos,Unix..)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr