ファイルをオープンまたは作成します。
FRESULT f_open ( FIL* FileObject, /* 空のファイル・オブジェクト構造体へのポインタ */ const XCHAR* FileName, /* ファイルのフルパス名へのポインタ */ BYTE ModeFlags /* モードフラグ */ );
値 | 意味 |
---|---|
FA_READ | 読み出しモードで開きます。読み書きする場合はFA_WRITEと共に指定します。 |
FA_WRITE | 書き込みモードで開きます。読み書きする場合はFA_READと共に指定します。 |
FA_OPEN_EXISTING | 既存のファイルを開きます。ファイルが無いときはエラーになります。(デフォルト) |
FA_OPEN_ALWAYS | 既存のファイルを開きます。ファイルが無いときはファイルを作成します。 |
FA_CREATE_NEW | ファイルを作成します。同名のファイルがある場合は、エラーになります。 |
FA_CREATE_ALWAYS | ファイルを作成します。同名のファイルがある場合は、サイズを0にしてから開きます。 |
作成されたファイル・オブジェクトは、以降そのファイルに対するアクセスに使用します。ファイルを閉じるときは、f_close()を使用します。何らかの変更が行われたファイルが正しく閉じられなかった場合、そのファイルが破損する場合があります。
ファイル・アクセスを開始する前に、f_mount()を使ってそれぞれの論理ドライブにワーク・エリア(ファイル・システム・オブジェクト)を与える必要があります。この初期化の後、その論理ドライブに対して全てのファイル関数が使えるようになります。
全ての構成で使用可能です。_FS_READONLY == 1のときは、FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW, FA_OPEN_ALWAYSの各フラグはサポートされません。
void main (void) { FATFS fs[2]; // 論理ドライブのワーク・エリア(ファイル・システム・オブジェクト) FIL fsrc, fdst; // ファイル・オブジェクト BYTE buffer[4096]; // file copy buffer FRESULT res; // FatFs function common result code UINT br, bw; // File R/W count // ドライブ0,1にワーク・エリアを与える f_mount(0, &fs[0]); f_mount(1, &fs[1]); // ドライブ1のソース・ファイルを開く res = f_open(&fsrc, "1:srcfile.dat", FA_OPEN_EXISTING | FA_READ); if (res) die(res); // ドライブ0にデスティネーション・ファイルを作成する res = f_open(&fdst, "0: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); // ワーク・エリアを開放する f_mount(0, NULL); f_mount(1, NULL); }