ファイルをオープンまたは作成します。
FRESULT f_open ( FIL* FileObject, // 空のファイルオブジェクト構造体へのポインタ const char* FileName, // ファイルのフルパス名へのポインタ BYTE ModeFlags // モードフラグ );
| 値 | 意味 |
|---|---|
| FA_READ | 読み出しモードでオープンします。読み書きする場合はFA_WRITEと共に指定します。 |
| FA_WRITE | 書き込みモードでオープンします。読み書きする場合はFA_READと共に指定します。 |
| FA_OPEN_EXISTING | 既存のファイルを開きます。ファイルが無いときはエラーになります。 |
| FA_CREATE_ALWAYS | ファイルを作成します。既存のファイルがある場合は、サイズを0にしてから開きます。 |
| FA_OPEN_ALWAYS | 既存のファイルを開きます。ファイルが無いときはファイルを作成します。 |
FatFsモジュールの使用を開始するにはまず、FatFsモジュールのグローバル変数FatFsにゼロクリアしたワークエリア(FATFS構造体)のアドレスを代入します。このようにしてFatFsモジュールにワークエリアを割り当てるとモジュールは動作可能状態になり、ファイル関数が使えるようになります。ゼロクリアの代わりにf_mountdrv()でもOKですが、少なくともその時点で物理ドライブが動作可能になっていなければなりません。FatFsモジュールの使用を終了するには、全てのファイルを閉じたあとFatFsをクリアします。その後、ワークエリアは破棄できます。
リードオンリー構成では、FA_WRITE, FA_CREATE_ALWAYS, FA_OPEN_ALWAYSの各フラグはサポートされません。
void main ()
{
FATFS fs; // FatFsワークエリア
FIL fsrc, fdst; // ファイルオブジェクト
BYTE buffer[4096]; // file copy buffer
FRESULT res; // FatFs function common result code
WORD br, bw; // File R/W count
// FatFsのワークエリアを確保する
FatFs = &fs;
memset(&fs, 0, sizeof(FATFS)); // ワークエリアの初期化。代わりに f_mountdrv() でもよい
// ソース・ファイルを開く
res = f_open(&fsrc, "srcfile.dat", FA_OPEN_EXISTING | FA_READ);
if (res) die(res);
// デスティネーション・ファイルを作成する
res = f_open(&fdst, "dstfile.dat", FA_CREATE_ALWAYS | FA_WRITE);
if (res) die(res);
// ソースからデスティネーションにコピーする
for (;;) {
res = f_read(&fsrc, buffer, sizeof(buffer), &br);
if (res || br == 0) break; // error or eof
res = f_write(&fdst, buffer, br, &bw);
if (res || bw < br) break; // error or disk full
}
// 全てのファイルを閉じる
f_close(&fsrc);
f_close(&fdst);
// FatFsのワークエリアを開放する
FatFs = NULL;
}