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,1999