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