Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » cherche un exemple pour la recherche de fichier avec Bfile de gint
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

cherche un exemple pour la recherche de fichier avec Bfile de gint

Posté le 06/06/2021 07:45

bonjour, je lis la documentation de Bfile car j'aimerais chercher TOUT les fichier avec l’extension .fdkl
/* BFile_FindFirst(): Search a directory for file with matching name
   Doesn't work on Main memory. Only four search handle can be opened, you need
   to close them to be able to reuse them. Search is NOT case sensitive and *
   can be used as a wildcard.

   @search    FONTCHARACTER file path to match
   @shandle   Search handle to pass to BFile_FindNext or BFile_FindClose
   @founfile  FONTCHARACTER found file path
   @fileinfo  Structure containing a lot of information on the found file
   Returns 0 on success, -1 if no file found, or negative value on error. */
struct BFile_FileInfo
{
    uint16_t index;
    uint16_t type;
    uint32_t file_size;
    /* Data size (file size minus the header) */
    uint32_t data_size;
    /* Is 0 if the file is complete */
    uint32_t property;
    /* Address of first fragment (do not use directly) */
    void *address;
};
int BFile_FindFirst(uint16_t const *search, int *shandle, uint16_t *foundfile,
    struct BFile_FileInfo *fileinfo);

/* BFile_FindNext(): Continue a search a directory for file with matching name

   @shandle   Search handle from BFile_FindFirst
   @founfile  FONTCHARACTER found file path
   @fileinfo  Structure containing a lot of information on the found file
   Returns 0 on success, -1 if end is reached, or negative value on error. */
int BFile_FindNext(int shandle, uint16_t *foundfile,
    struct BFile_FileInfo *fileinfo);

/* BFile_FindClose(): Close the specified search handle
   @shandle  Search handle from BFile_FindFirst
   Return 0 on success or negative value on error. */
int BFile_FindClose(int shandle);

j'ai beau lire ca a plusieurs reprises mais je sais toujours pas comment ca marche précisément


Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 06/06/2021 08:35 | #


Tu as le code AST3 qui utilise cette fonction. Ça doit être le fichier save.c de mémoire…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 06/06/2021 08:37 | #


Avant de commencer, note que les calculatrices avant la Graph 35+E II et la Graph 90+E sont limitées à des extensions de trois caractères, donc pour éviter les problèmes de compatibilité je te recommande de donner une extension à trois caractères à tes fichiers.

La recherche se fait en plusieurs appels : d'abord BFile_FindFirst() qui initialise la recherche à partir du motif (\\fls0\*.fdkl) et stocke dans *shandle un entier qui identifie l'opération (similaire à la valeur retournée par BFile_OpenFile()) et qui est utilisé pour les autres appels.

BFile_FindFirst() cherche immédiatement un premier fichier et renvoie les informations le concernant dans *foundfile et *fileinfo. La valeur de retour est 0 si un tel fichier est trouvé, -1 si aucun fichier ne correspond au motif demandé, et une autre valeur négative pour les erreurs (motif invalide/trop long, erreur sur le système de fichiers, etc).

Si BFile_FindFirst() renvoie 0, alors tu peux chercher les fichiers suivants en appelant BFile_FindNext(), qui fonctionne pareil (seulement cette fois-ci tu n'as pas besoin de donner le motif, puisqu'il a déjà été enregistré, et tu donnes la valeur de shandle plutôt que l'adresse, parce que la valeur n'a pas besoin d'être modifiée). La recherche s'arrête quand BFile_FindNext() renvoie -1 (plus de fichiers à trouver) ou un autre nombre négatif (erreur).

À la fin, tu dois absolument appeler BFile_FindClose(). C'est d'une importance capitale, car toute recherche qui n'est pas terminée par un appel à BFile_FindClose() reste "en cours", et l'OS ne peut pas avoir plus de quelques recherches en cours en même temps (4 je crois). Si tu oublies de terminer tes recherches tu finiras par occuper toutes les places disponibles et l'OS n'en aura plus pour lui, ce qui a pour effet de vider la liste d'add-ins dans le menu principal (puisque l'OS ne peut plus les chercher), et t'oblige à RESET la calculatrice.

Bien sûr, tout ça doit être fait dans un gint_world_switch().

Est-ce que ça t'aide ?
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 06/06/2021 08:41 | #


Oh, mais c'est ça les bugs où les add-in disparaissent ?
Ça m'est arrivé une fois sur ma calto, j'ai été obligé de les retransférer x)
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 06/06/2021 08:48 | #


Oui. Ça fait aussi planter l'appli MEMORY puisqu'elle ne peut plus lister les fichiers. À bien y réfléchir je crois que la solution n'est pas seulement de RESET, mais une combinaison de RESET, transfert USB, ou optimisation. À vérifier (mais ce n'est pas un problème grave).
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 06/06/2021 08:49 | #


Ma calto va très bien maintenant, mais c'est vrai que pour récupérer les add-in j'avais un peu douillé
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque


LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 31 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd