##### Shinobi Library - ペリフェラル・記録デバイス関数

# buFindNextFile

次のファイルの名前の取得

### 書式

> `Sint32 buFindNextFile( 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

> 通常、buFindFistFile()関数と組み合わせて、ドライブにある全ファイル名を取得するのに使用します。

### 用例

>     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バイトの領域が必要です。 ファイルが存在しない場合、fname[0] = '\0'となります。

buFindNextFile

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000