The f_open function creates or opens the file and initialize a file object structure to be used to access the file.
FRESULT f_open ( FIL* FileObject, // Pointer to the file object structure const char* 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. |
| FA_CREATE_ALWAYS | Creates a new file. If the file is existing, it is truncated and overwritten. |
| FA_OPEN_ALWAYS | Opens the file, if it is existing. If not, the function creates the new file. |
To start FatFs module, prepare a work area (FATFS structure), fill it with zero and set its address to the global variable FatFs to give the work area to the FatFs module. All file functions can work after the initialization. f_mountdrv() can also be used instead of the zero filling, however, the physical drive must be ready at that time. To terminate use of the FatFs module, close all files, clear FatFs and then the work area can be discarded.
Flags FA_WRITE, FA_CREATE_ALWAYS, FA_OPEN_ALWAYS are not supported in read-only configuration.
void main ()
{
FATFS fs; // FatFs work area
FIL fsrc, fdst; // file structures
BYTE buffer[4096]; // file copy buffer
FRESULT res; // FatFs function common result code
WORD br, bw; // File R/W count
// Give a work area to FatFs module (activate FatFs module)
FatFs = &fs;
memset(&fs, 0, sizeof(FATFS)); // Clear work area. f_mountdrv() can also be used instead.
// Open source file
res = f_open(&fsrc, "srcfile.dat", FA_OPEN_EXISTING | FA_READ);
if (res) die(res);
// Create destination file
res = f_open(&fdst, "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 all files
f_close(&fsrc);
f_close(&fdst);
// Deactivate FatFs module
FatFs = NULL;
}