Aide - Recherche - Membres - Calendrier
Version complète : recherche de fichier...
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Selmak7
bonjour tlm,

je fais une recherche de tous les fichiers présents sur le palm (en mémoire RAM) en utilisant la fonction DmGetNextDatabaseByTypeCreator(...), ca marche, mais il m'affiche un nombre anormalement élevé... Enumère til aussi les fichiers présent en ROM ??? Et comment afficher que les fichiers présents en RAM ??? (c pour faire un explorateur de fichiers).

voici mon code :
CODE
void ScanRam()

{

   Boolean search = true;

   DmSearchStateType searchType;

   UInt16 numCard;

   LocalID id;

   UInt16 nbFile =  0;

   char buffer[50];



   while( DmGetNextDatabaseByTypeCreator( search, &searchType, 0, 0, false, &numCard, &id ) == 0 )

   {

       search = false;

       StrPrintF( buffer, "%u", id );

       nbFile++;

   }



   StrPrintF( buffer, "Nombre de fichiers :  %u", nbFile );

   WinDrawChars( buffer, StrLen( buffer ), 2, 40 );

}
Eddy
CITATION(Selmak7)
mais il m'affiche un nombre anormalement élevé...  


Ton bout de code me semble correct.

Je viens de compter à la louche les bases presentes dans la RAM de mon TT3 : un peu plus de 300. Ca comprend les prc, les bases associées aux prc, plus tous les bases "systemes", gérées par le palm.

Si tu ne veux que les prc, il faut, me semble-t-il, filtrer les bases retournées et ne s'interesser qu'à celles dont le type est 'appl'

Eddy
Patrice
Les fichiers en ROM doivent effectivement être inclus dans la recherche et je ne sais pas comment les distinguer.
olivier101
D'ailleurs il ne s'agit pas de fichiers mais de bases... sleep.gif
snark
En HB++, il y a moyen d'itérer les bases sur les critères creatorID et type. A chaque itération, les infos sur la base courante sont stockées dans un objet DatabaseInfo. Un des attributs de DatabaseInfo est un booléen intitulé ROM qui, s'il est mis à True, indique que la base est en ROM.
CODE
 Dim db As New DatabaseInfo



 If db.FindFirstByTypeCreator("","") Then

   Do

     If db.ROM Then

        ' c'est en ROM

     Else

        ' c'est en RAM

   Loop While db.FindNext

 End If

Y'a pas un équivalent en C?
Payalba
Voici comment HB++ détermine si une base est en ROM (voir forum HB++)
La traduction et les commentaires sont de moi même .

Ajouter dans un module (pour wrapper l'API)

CODE
Private const sysTrapMemLocalIDKind as Long=&HA024

Public Declare Function MemLocalIDKind(byval localID as long) as Byte Trap sysTrapMemLocalIDKind


MemLocalIDKind permet de savoir si un ID local est un morceau de mémoire déplaçable ou non.

Ensuite on utilise l'API comme cela :

CITATION
private function isInRom(byref db as DatabaseInfo) as boolean
 isInRom = (MemLocalIDKind(db.LocalID) <> 1)
End Function


Deux liens pour être plus précis :
http://www.palmos.com/dev/support/docs/pal...er.html#1016886

http://www.handheld-basic.com/forum/viewto...6&highlight=rom
snark
Ils ont donc implémenté la fonction API que tu décris directement dans le langage, avec la propriété ROM. Cool!

Mais ça va sûrement aider nos collègues C-istes! anim_wink.gif
Palmidem
Pétard, au delà de la fonctionnalité, je me délecte de ces figures de style au lu de la page HB forum ad hoc ...
Ca me rappelle certains concours : je l'ai fait tenir en moins de lignes que toi, ou le mien ne fait que 1,2ko, et le casse tête des récursives ...
mais bon, c'est HS, ok ... (un newbie).
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.