// File Access FAT_FILE_HANDLE Fat_FileOpen(FAT_HANDLE Fat, const char *pFilename){ bool bFind = FALSE; FAT_BROWSE_HANDLE hBrowse; FILE_CONTEXT FileContext; FAT_FILE_INFO *pFile = 0; if (Fat_FileBrowseBegin(Fat, &hBrowse)){ while (!bFind && Fat_FileBrowseNext(&hBrowse, &FileContext)){ if (FileContext.bLongFilename){ bFind = fatSameLongFilename((alt_u16 *)FileContext.szName, (alt_u16 *)pFilename); }else{ if (strcmpi(FileContext.szName, pFilename) == 0) bFind = TRUE; } } // while if (bFind){ pFile = malloc(sizeof(FAT_FILE_INFO)); if (pFile){ pFile->OpenAttribute = FILE_OPEN_READ; pFile->SeekPos = 0; pFile->Directory = FileContext; pFile->IsOpened = TRUE; pFile->Cluster = FileContext.FirstLogicalCluster; pFile->ClusterSeq = 0; pFile->Fat = Fat; } } } return (FAT_FILE_HANDLE)pFile; }
// File Access FAT_FILE_HANDLE Fat_FileOpen(FAT_HANDLE Fat, const char *pFilename){ bool bFind = FALSE; FAT_BROWSE_HANDLE hBrowse; FILE_CONTEXT FileContext; FAT_FILE_INFO *pFile = 0; int nPos = 0; char szWaveFilename[MAX_FILENAME_LENGTH]; if (Fat_FileBrowseBegin(Fat, &hBrowse)){ while (!bFind && Fat_FileBrowseNext(&hBrowse, &FileContext)){ if (FileContext.bLongFilename){ //bFind = fatSameLongFilename((alt_u16 *)FileContext.szName, (alt_u16 *)pFilename); nPos = 0; alt_u16 *pData16; alt_u8 *pData8; pData16 = (alt_u16 *)FileContext.szName; pData8 = FileContext.szName; while(*pData16){ if (*pData8 && *pData8 != ' ') szWaveFilename[nPos++] = *pData8; pData8++; if (*pData8 && *pData8 != ' ') szWaveFilename[nPos++] = *pData8; pData8++; // pData16++; } szWaveFilename[nPos] = 0; if(strcmp(pFilename,szWaveFilename) == 0) bFind = TRUE; }else{ if (strcmpi(FileContext.szName, pFilename) == 0) bFind = TRUE; } } // while if (bFind){ pFile = malloc(sizeof(FAT_FILE_INFO)); if (pFile){ pFile->OpenAttribute = FILE_OPEN_READ; pFile->SeekPos = 0; pFile->Directory = FileContext; pFile->IsOpened = TRUE; pFile->Cluster = FileContext.FirstLogicalCluster; pFile->ClusterSeq = 0; pFile->Fat = Fat; } } } return (FAT_FILE_HANDLE)pFile; }
unsigned int Fat_FileCount(FAT_HANDLE Fat){ unsigned int nCount = 0; FAT_BROWSE_HANDLE hBrowse; FILE_CONTEXT FileContext; if (Fat_FileBrowseBegin(Fat, &hBrowse)){ while(Fat_FileBrowseNext(&hBrowse, &FileContext)) nCount++; } return nCount; }
bool Fat_FileExist(FAT_HANDLE Fat, const char *pFilename){ bool bFind = FALSE; FAT_BROWSE_HANDLE hBrowse; FILE_CONTEXT FileContext; if (Fat_FileBrowseBegin(Fat, &hBrowse)){ while (!bFind && Fat_FileBrowseNext(&hBrowse, &FileContext)){ if (FileContext.bLongFilename){ bFind = fatSameLongFilename((alt_u16 *)FileContext.szName, (alt_u16 *)pFilename); }else{ if (strcmpi(FileContext.szName, pFilename) == 0) bFind = TRUE; } } // while Fat_FileClose(Fat); } return bFind; }