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

解説

指定した拡張ソケットに挿入されているメモリーカードの第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;
  /* 第1ファイルのファイル名取得 */
  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);
      /* 第2ファイル以降のファイル名取得 */
      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バイトの領域が必要です。

buFindFirstFile
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998