Sint32 buFindFirstFile( drive, fname )
Sint32 drive
char *fname
drive 拡張ソケットの番号 fname ファイル名を取得するアドレス
BUD_ERR_OK 正常終了 BUD_ERR_FILE_NOT_FOUND ファイルがない BUD_ERR_UNFORMAT フォーマットされていない BUD_ERR_NO_DISK メモリーカードがない BUD_ERR_BUSY 何らかのTYPE_B関数が処理中である
指定した拡張ソケットに挿入されているメモリーカードの第1ファイルのファイル名を取得します。拡張ソケットの番号driveには次の値が指定できます。
定義 意味 BUD_DRIVE_A1 ポートAの拡張ソケット1 BUD_DRIVE_A2 ポートAの拡張ソケット2 BUD_DRIVE_B1 ポートBの拡張ソケット1 BUD_DRIVE_B2 ポートBの拡張ソケット2 BUD_DRIVE_C1 ポートCの拡張ソケット1 BUD_DRIVE_C2 ポートCの拡張ソケット2 BUD_DRIVE_D1 ポートDの拡張ソケット1 BUD_DRIVE_D2 ポートDの拡張ソケット2
ファイルが存在しない場合、fname[0] = '\0'となります。
通常、buFindNextFile()関数と組み合わせて、ドライブにある全ファイル名を取得するのに使用します。
Sint32 ret, files, blocks, totel; char fname[16]; BUS_FILEINFO info; files = blocks = total = 0; /* Get name of first file */ ret = buFindFirstFile(drive, fname); if (ret < 0) { if (ret == BUD_ERR_FILE_NOT_FOUND) goto end; else goto err; } if (buGetFileInfo(drive, fname, &info) < 0) goto err; blocks = info.blocks; total += blocks; files++; do { printf("%12s %10d bytes(%3d blocks)\n", files, blocks * 512, blocks); /* Get name of second and subsequent files */ ret = buFindNextFile(drive, fname); if (ret < 0) { if (ret == BUD_ERR_FILE_NOT_FOUND) goto end; else goto err; } if (buGetFileInfo(drive, fname, &info) < 0) goto err; blocks = info.blocks; total += blocks; files++; } while (files < FILE_MAX); end: return OK; err: return NG;
ファイル名を格納する領域には最低 13バイトの領域が必要です。