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

# buSaveFile

ファイルのセーブ

### 書式

  Sint32 buSaveFile( drive, *fname, *buf, nblock, *time, flag )
  Sint32 drive
  const char *fname
  const void *buf
  Uint32 nblock
  const BUS_TIME *time
  Sint32 flag

### 引数

  drive | 拡張ソケットの番号
  *fname | ファイル名
  *buf | 読み込みアドレス
  nblock | 読み込むブロック数
  *time | タイムスタンプ
  flag | フラグ
  | BUD_FLAG_VERIFY:ベリファイあり
  | BUD_FLAG_COPY(n):コピーフラグ(nはコピーフラグ値)

### 戻値

  BUD_ERR_OK | 処理要求を受け付けた
  BUD_ERR_BUSY | 処理中のため要求を受け付けられなかった

### 解説

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

  拡張ソケットを指定する引数 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

  通常のアプリケーションであればこの関数でファイルをまるごとセーブします。 同名ファイルがある場合、古いファイルは消去されます。 ただし同名ファイルが実行ファイルであった場合はエラーとなります。 また、*bufには必ず 4バイトバウンダリでアドレスを与えるようにしてください。

### 用例

      Sint32 ret;
      Sint32 blocks, flag;
      BUS_TIME time;
      SYS_RTC_DATE rtc;
      extern char SaveData[];                      /* セーブするデータ(512*10バイト) */
      	：
      blocks = 10;                                  /* ファイルサイズは10ブロック */
      flag = BUD_FLAG_VERIFY | BUD_FLAG_COPY(0x00); /* ベリファイを行う | コピーフラグを00Hに設定する */
      syRtcGetDate( &rtc );
      time = ( BUS_TIME )rtc;  /* タイムスタンプの設定 */
      ret = buSaveFile(BUD_DRIVE_A1, "SAVEDATA", SaveData, blocks, &time, flag);
      if (ret == BUD_ERR_OK) {
      	/* セーブリクエストに成功した */
      } else {
      	/* セーブリクエストに失敗した(BUSY) */
      }
      	：

### 備考

  ベリファイエラーが発生した場合でも、ファイルはセーブされています。

  buStat()関数によるこの関数の完了ステータスは

  BUD_ERR_OK | 正常終了
  BUD_ERR_NO_DISK | メモリカードがない
  BUD_ERR_UNFORMAT | フォーマットされていない
  BUD_ERR_FILE_NOT_FOUND | ファイルがない
  BUD_ERR_CANNOT_OPEN | ファイルが開けない

  セーブには、(セーブブロック数×5 Int)の時間を必要とします。 (他の拡張ソケットの状態等によっては、多少時間は変動します。)

buSaveFile

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998