The f_open function creates a file object to be used to access the file.
FRESULT f_open ( FIL* FileObject, /* Pointer to the blank file object structure */ const XCHAR* FileName, /* Pointer to the file neme */ BYTE ModeFlags /* Mode flags */ );
Value | Description |
---|---|
FA_READ | Specifies read access to the object. Data can be read from the file. Combine with FA_WRITE for read-write access. |
FA_WRITE | Specifies write access to the object. Data can be written to the file. Combine with FA_READ for read-write access. |
FA_OPEN_EXISTING | Opens the file. The function fails if the file is not existing. (Default) |
FA_OPEN_ALWAYS | Opens the file, if it is existing. If not, a new file is created. |
FA_CREATE_NEW | Creates a new file. The function fails if the file is already existing. |
FA_CREATE_ALWAYS | Creates a new file. If the file is existing, it is truncated and overwritten. |
The created file object is used for subsequent calls to refer to the file. When close an open file object, use f_close function. If the modified file is not closed, the file may be collapsed.
Before using any file function, a work area (file system object) must be given to the logical drive with f_mount function. All file functions can work after this procedure.
Always available. The mode flags, FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW, FA_OPEN_ALWAYS, are not available when _FS_READONLY == 1.
void main (void) { FATFS fs[2]; // Work area (file system object) for logical drives FIL fsrc, fdst; // file objects BYTE buffer[4096]; // file copy buffer FRESULT res; // FatFs function common result code UINT br, bw; // File R/W count // Register work area for logical drives f_mount(0, &fs[0]); f_mount(1, &fs[1]); // Open source file on the drive 1 res = f_open(&fsrc, "1:srcfile.dat", FA_OPEN_EXISTING | FA_READ); if (res) die(res); // Create destination file on the drive 0 res = f_open(&fdst, "0:dstfile.dat", FA_CREATE_ALWAYS | FA_WRITE); if (res) die(res); // Copy source to destination 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 } // Close open files f_close(&fsrc); f_close(&fdst); // Unregister work area prior to discard it f_mount(0, NULL); f_mount(1, NULL); }