WINCE与WM的差异(1)-查询文件系统目录结构

    技术2024-06-29  62

    我在便携设备上写程序,需要查询设备上的文件系统目录结构,比如,我要知道设备的外部存储卡的目录,还要知道设备的flash分区的目录。这样,我要保存文件的时候,尽量先往存储卡上写,如果没有插卡,再往flash分区写。

     

    首先查找MSDN,找到了FindFirstFlashCard这组API可用。

    很高兴,在WM的SDK上编译链接过了,在WM设备上使用也很成功。

     

    我又换了一台WINCE的设备,用CE5的SDK编译我的程序,编译不过,没有找到FindFirstFlashCard函数。

    无奈,查找资料,又找到了FindFirstStore、FindFirstPartition这组API可以在CE上使用。

     

    但是,FindFirstStore、FindFirstPartition在WM SDK中只有声明,没有定义,链接不过。

     

    再无奈,只好在代码里面用宏定义来区分WINCE和WM,分别使用这两组API。

     

    再找找有没有其他的办法。

     

    试验代码如下:

    //FindFirstFlashCard

    {  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;        // Root directory path of storage cards.  TCHAR szRootDirPath[MAX_PATH];    // String for storing the storage card name with the full path.  TCHAR szSCName[MAX_PATH];         // 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 0;  hFlashCard = FindFirstFlashCard (&lpwfdFlashCardTmp [0]);  if (hFlashCard == INVALID_HANDLE_VALUE)  {   // Free the memory.   LocalFree (lpwfdFlashCardTmp);    return 0;  }  while (bContinue)  {   iNumOfFlashCard += 1;   // Search for the next storage card.   bContinue = FindNextFlashCard (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 0;   }   // Assign lpwfdFlashCardTmp to lpwfdFlashCard.   for (index=0; index < iNumOfFlashCard; ++index)   {    lpwfdFlashCard [index] = lpwfdFlashCardTmp [index];   }   // Free the memory.   LocalFree (lpwfdFlashCard);   }  LocalFree (lpwfdFlashCardTmp); }

     

    //FindFirstStore {  PARTINFO partinfo;  STOREINFO storeinfo, storeinfo2;  HANDLE hand1,hand2;  BOOL bContinue = TRUE;        int iNumOfFlashCard = 0;        memset(&storeinfo2, 0, sizeof(storeinfo2));  storeinfo2.cbSize = sizeof(storeinfo2);  hand1 = FindFirstStore(&storeinfo2);  if (hand1 == INVALID_HANDLE_VALUE)  {   DWORD ret = GetLastError();   return FALSE;  }

      bContinue = TRUE;  iNumOfFlashCard = 0;  while (bContinue)  {   iNumOfFlashCard += 1;   memset(&storeinfo, 0, sizeof(storeinfo));   storeinfo.cbSize = sizeof(storeinfo);   bContinue = FindNextStore (hand1,&storeinfo);  }  FindCloseStore(hand1);//  hand1 = OpenStore(storeinfo2.szDeviceName);  if (hand1 == INVALID_HANDLE_VALUE)  {   DWORD ret = GetLastError();   return FALSE;  }

      memset(&partinfo, 0, sizeof(partinfo));  partinfo.cbSize = sizeof(partinfo);  hand2 = FindFirstPartition(hand1, &partinfo);  if (hand2 == INVALID_HANDLE_VALUE)  {   DWORD ret = GetLastError();   return FALSE;  }  bContinue = TRUE;  iNumOfFlashCard = 0;  while (bContinue)  {   iNumOfFlashCard += 1;   memset(&partinfo, 0, sizeof(partinfo));   partinfo.cbSize = sizeof(partinfo);   bContinue = FindNextPartition (hand2,&partinfo);  }  FindClosePartition(hand2); }

    最新回复(0)