Share via


How to: Enumerate Storage Cards

4/8/2010

Windows Mobile software for Windows Mobile Professional and Windows Mobile Classic provides the FindFirstFlashCard and the FindNextFlashCard functions to programmatically enumerate storage cards. FindFirstFlashCard returns a search handle that FindNextFlashCard uses. It also returns a pointer to the first storage card, if any. FindNextFlashCard returns a pointer to the next storage card and a BOOL value indicating whether the search was successful. The following code example shows how to use FindFirstFlashCard and FindNextFlashCard to locate storage cards on Windows Mobile Professional or Windows Mobile Classic devices.

Note

Because a device can have multiple storage cards with various names, your application cannot make any assumptions about the naming of or path to a particular card.

Example

int index;
// Total number of storage cards found.
int iNumOfFlashCard = 0;
// Maximum number of storage cards to find.
int iMaxCards = 10;
// Whether to continue searching after finding a card.
BOOL bContinue = TRUE;
// Search handle for storage cards.
HANDLE hFlashCard;
// Structure for storing card information.
WIN32_FIND_DATA *lpwfdFlashCard;
// Structure for storing card information temporarily.
WIN32_FIND_DATA *lpwfdFlashCardTmp;
lpwfdFlashCardTmp = (WIN32_FIND_DATA *) LocalAlloc
                    (LPTR, iMaxCards * sizeof (WIN32_FIND_DATA));
// Test for failed memory allocation.
if (lpwfdFlashCardTmp == NULL)
   return;
hFlashCard = (&lpwfdFlashCardTmp [0]);
if (hFlashCard == INVALID_HANDLE_VALUE)
{
   // Free the memory.
   LocalFree (lpwfdFlashCardTmp);
   return;
}
while (bContinue)
{
   iNumOfFlashCard += 1;
   // Search for the next storage card.
   bContinue =  (hFlashCard,
               &lpwfdFlashCardTmp [iNumOfFlashCard]);
}
// Close the search handle.
FindClose (hFlashCard);
if (iNumOfFlashCard > 0)
{
   // Allocate memory for lpwfdFlashCard.
   lpwfdFlashCard = (WIN32_FIND_DATA *) LocalAlloc
                    (LPTR, iNumOfFlashCard * sizeof (WIN32_FIND_DATA));
   // Test for failed memory allocation.
   if (lpwfdFlashCard == NULL)
   {
      // Free the temp card memory.
      LocalFree (lpwfdFlashCardTmp);
      return;
   }
   // Assign lpwfdFlashCardTmp to lpwfdFlashCard.
   for (index=0; index < iNumOfFlashCard; ++index)
   {
    lpwfdFlashCard [index] = lpwfdFlashCardTmp [index];
   }
// Free the memory.
   LocalFree (lpwfdFlashCard);
}
LocalFree (lpwfdFlashCardTmp);

See Also

Tasks

How to: List and Locate Storage Card Files

Concepts

Automatically Run an Application from a Storage Card
File and Application Management Reference