##### Shinobiライブラリ - メモリーカード関数

# buFindFirstFile

第1ファイルの名前の取得

### 書式

  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関数が処理中である

### 解説

  指定した拡張ソケットに挿入されているメモリーカードの第１ファイルのファイル名を取得します。

  拡張ソケットを指定する引数 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;
        /* 第１ファイルのファイル名取得 */
        ret = buFindFirstFile(drive, fname);
        if (ret &lt; 0) {
          if (ret == BUD_ERR_FILE_NOT_FOUND) goto end;
          else goto err;
        }
        if (buGetFileInfo(drive, fname, &info) &lt; 0) goto err;
          blocks = info.blocks;
          total += blocks;
          files++;
          do {
            printf("%12s %10d bytes(%3d blocks)\n", files, blocks * 512, blocks);
            /* 第２ファイル以降のファイル名取得 */
            ret = buFindNextFile(drive, fname);
            if (ret &lt; 0) {
              if (ret == BUD_ERR_FILE_NOT_FOUND) goto end;
              else goto err;
            }
            if (buGetFileInfo(drive, fname, &info) &lt; 0) goto err;
            blocks = info.blocks;
            total += blocks;
            files++;
          } while (files &lt; FILE_MAX);
        end:
          return OK;
        err:
          return NG;

### 備考

  ファイル名を格納する領域には最低 13バイトの領域が必要です。

buFindFirstFile

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998