Data Structures | Defines | Functions

# FAT file functions
[FAT support]

Functions for managing files. More...

## Data Structures
struct | fat_dir_entry_struct
| Describes a directory entry. More...
## Defines
#define | FAT_ATTRIB_READONLY
| The file is read-only.
#define | FAT_ATTRIB_HIDDEN
| The file is hidden.
#define | FAT_ATTRIB_SYSTEM
| The file is a system file.
#define | FAT_ATTRIB_VOLUME
| The file is empty and has the volume label as its name.
#define | FAT_ATTRIB_DIR
| The file is a directory.
#define | FAT_ATTRIB_ARCHIVE
| The file has to be archived.
#define | FAT_SEEK_SET
| The given offset is relative to the beginning of the file.
#define | FAT_SEEK_CUR
| The given offset is relative to the current read/write position.
#define | FAT_SEEK_END
| The given offset is relative to the end of the file.
## Functions
uint8_t | fat_get_dir_entry_of_path (struct fat_fs_struct *fs, const char *path, struct fat_dir_entry_struct *dir_entry)
| Retrieves the directory entry of a path.
struct fat_file_struct * | fat_open_file (struct fat_fs_struct *fs, const struct fat_dir_entry_struct *dir_entry)
| Opens a file on a FAT filesystem.
void | fat_close_file (struct fat_file_struct *fd)
| Closes a file.
intptr_t | fat_read_file (struct fat_file_struct *fd, uint8_t *buffer, uintptr_t buffer_len)
| Reads data from a file.
intptr_t | fat_write_file (struct fat_file_struct *fd, const uint8_t *buffer, uintptr_t buffer_len)
| Writes data to a file.
uint8_t | fat_seek_file (struct fat_file_struct *fd, int32_t *offset, uint8_t whence)
| Repositions the read/write file offset.
uint8_t | fat_resize_file (struct fat_file_struct *fd, uint32_t size)
| Resizes a file to have a specific size.
uint8_t | fat_create_file (struct fat_dir_struct *parent, const char *file, struct fat_dir_entry_struct *dir_entry)
| Creates a file.
uint8_t | fat_delete_file (struct fat_fs_struct *fs, struct fat_dir_entry_struct *dir_entry)
| Deletes a file or directory.
uint8_t | fat_move_file (struct fat_fs_struct *fs, struct fat_dir_entry_struct *dir_entry, struct fat_dir_struct *parent_new, const char *file_new)
| Moves or renames a file.
void | fat_get_file_modification_date (const struct fat_dir_entry_struct *dir_entry, uint16_t *year, uint8_t *month, uint8_t *day)
| Returns the modification date of a file.
void | fat_get_file_modification_time (const struct fat_dir_entry_struct *dir_entry, uint8_t *hour, uint8_t *min, uint8_t *sec)
| Returns the modification time of a file.
void | fat_set_file_modification_date (struct fat_dir_entry_struct *dir_entry, uint16_t year, uint8_t month, uint8_t day)
| Sets the modification time of a date.
void | fat_set_file_modification_time (struct fat_dir_entry_struct *dir_entry, uint8_t hour, uint8_t min, uint8_t sec)
| Sets the modification time of a file.

## Detailed Description

Functions for managing files.

## Define Documentation

#define FAT_ATTRIB_ARCHIVE

The file has to be archived.

#define FAT_ATTRIB_DIR

The file is a directory.

#define FAT_ATTRIB_HIDDEN

The file is hidden.

#define FAT_ATTRIB_READONLY

The file is read-only.

#define FAT_ATTRIB_SYSTEM

The file is a system file.

#define FAT_ATTRIB_VOLUME

The file is empty and has the volume label as its name.

#define FAT_SEEK_CUR

The given offset is relative to the current read/write position.

#define FAT_SEEK_END

The given offset is relative to the end of the file.

#define FAT_SEEK_SET

The given offset is relative to the beginning of the file.

## Function Documentation

void fat_close_file | ( | struct fat_file_struct * | fd | ) |

Closes a file.

Parameters:

  `[in]` | fd | The file handle of the file to close.

See also:
  fat_open_file

uint8_t fat_create_file | ( | struct fat_dir_struct * | parent,
|  | const char * | file,
|  | struct fat_dir_entry_struct * | dir_entry |
| ) |  |  |

Creates a file.

Creates a file and obtains the directory entry of the new file. If the file to create already exists, the directory entry of the existing file will be returned within the dir_entry parameter.

Note:
  The file name is not checked for invalid characters.
  The generation of the short 8.3 file name is quite simple. The first eight characters are used for the filename. The extension, if any, is made up of the first three characters following the last dot within the long filename. If the filename (without the extension) is longer than eight characters, the lower byte of the cluster number replaces the last two characters to avoid name clashes. In any other case, it is your responsibility to avoid name clashes.

Parameters:

  `[in]` | parent | The handle of the directory in which to create the file.
  `[in]` | file | The name of the file to create.
  `[out]` | dir_entry | The directory entry to fill for the new (or existing) file.

Returns:
  0 on failure, 1 on success, 2 if the file already existed.

See also:
  fat_delete_file

uint8_t fat_delete_file | ( | struct fat_fs_struct * | fs,
|  | struct fat_dir_entry_struct * | dir_entry |
| ) |  |  |

Deletes a file or directory.

If a directory is deleted without first deleting its subdirectories and files, disk space occupied by these files will get wasted as there is no chance to release it and mark it as free.

Parameters:

  `[in]` | fs | The filesystem on which to operate.
  `[in]` | dir_entry | The directory entry of the file to delete.

Returns:
  0 on failure, 1 on success.

See also:
  fat_create_file

uint8_t fat_get_dir_entry_of_path | ( | struct fat_fs_struct * | fs,
|  | const char * | path,
|  | struct fat_dir_entry_struct * | dir_entry |
| ) |  |  |

Retrieves the directory entry of a path.

The given path may both describe a file or a directory.

Parameters:

  `[in]` | fs | The FAT filesystem on which to search.
  `[in]` | path | The path of which to read the directory entry.
  `[out]` | dir_entry | The directory entry to fill.

Returns:
  0 on failure, 1 on success.

See also:
  fat_read_dir

void fat_get_file_modification_date | ( | const struct fat_dir_entry_struct * | dir_entry,
|  | uint16_t * | year,
|  | uint8_t * | month,
|  | uint8_t * | day |
| ) |  |  |

Returns the modification date of a file.

Parameters:

  `[in]` | dir_entry | The directory entry of which to return the modification date.
  `[out]` | year | The year the file was last modified.
  `[out]` | month | The month the file was last modified.
  `[out]` | day | The day the file was last modified.

void fat_get_file_modification_time | ( | const struct fat_dir_entry_struct * | dir_entry,
|  | uint8_t * | hour,
|  | uint8_t * | min,
|  | uint8_t * | sec |
| ) |  |  |

Returns the modification time of a file.

Parameters:

  `[in]` | dir_entry | The directory entry of which to return the modification time.
  `[out]` | hour | The hour the file was last modified.
  `[out]` | min | The min the file was last modified.
  `[out]` | sec | The sec the file was last modified.

uint8_t fat_move_file | ( | struct fat_fs_struct * | fs,
|  | struct fat_dir_entry_struct * | dir_entry,
|  | struct fat_dir_struct * | parent_new,
|  | const char * | file_new |
| ) |  |  |

Moves or renames a file.

Changes a file's name, optionally moving it into another directory as well. Before calling this function, the target file name must not exist. Moving a file to a different filesystem (i.e. parent_new doesn't lie on fs) is not supported.

After successfully renaming (and moving) the file, the given directory entry is updated such that it points to the file's new location.

Note:
  The notes which apply to fat_create_file() also apply to this function.

Parameters:

  `[in]` | fs | The filesystem on which to operate.
  `[in,out]` | dir_entry | The directory entry of the file to move.
  `[in]` | parent_new | The handle of the new parent directory of the file.
  `[in]` | file_new | The file's new name.

Returns:
  0 on failure, 1 on success.

See also:
  fat_create_file, fat_delete_file, fat_move_dir

struct fat_file_struct* fat_open_file | ( | struct fat_fs_struct * | fs,
|  | const struct fat_dir_entry_struct * | dir_entry |
| ) |  |  | `[read]`

Opens a file on a FAT filesystem.

Parameters:

  `[in]` | fs | The filesystem on which the file to open lies.
  `[in]` | dir_entry | The directory entry of the file to open.

Returns:
  The file handle, or 0 on failure.

See also:
  fat_close_file

intptr_t fat_read_file | ( | struct fat_file_struct * | fd,
|  | uint8_t * | buffer,
|  | uintptr_t | buffer_len |
| ) |  |  |

Reads data from a file.

The data requested is read from the current file location.

Parameters:

  `[in]` | fd | The file handle of the file from which to read.
  `[out]` | buffer | The buffer into which to write.
  `[in]` | buffer_len | The amount of data to read.

Returns:
  The number of bytes read, 0 on end of file, or -1 on failure.

See also:
  fat_write_file

uint8_t fat_resize_file | ( | struct fat_file_struct * | fd,
|  | uint32_t | size |
| ) |  |  |

Resizes a file to have a specific size.

Enlarges or shrinks the file pointed to by the file descriptor to have exactly the specified size.

If the file is truncated, all bytes having an equal or larger offset than the given size are lost. If the file is expanded, the additional bytes are allocated.

Note:
  Please be aware that this function just allocates or deallocates disk space, it does not explicitely clear it. To avoid data leakage, this must be done manually.

Parameters:

  `[in]` | fd | The file decriptor of the file which to resize.
  `[in]` | size | The new size of the file.

Returns:
  0 on failure, 1 on success.

uint8_t fat_seek_file | ( | struct fat_file_struct * | fd,
|  | int32_t * | offset,
|  | uint8_t | whence |
| ) |  |  |

Repositions the read/write file offset.

Changes the file offset where the next call to fat_read_file() or fat_write_file() starts reading/writing.

If the new offset is beyond the end of the file, fat_resize_file() is implicitly called, i.e. the file is expanded.

The new offset can be given in different ways determined by the `whence` parameter:

- FAT_SEEK_SET: `*offset` is relative to the beginning of the file.
- FAT_SEEK_CUR: `*offset` is relative to the current file position.
- FAT_SEEK_END: `*offset` is relative to the end of the file.

The resulting absolute offset is written to the location the `offset` parameter points to.

Calling this function can also be used to retrieve the current file position:

       int32_t file_pos = 0;
       if(!fat_seek_file(fd, &file_pos, FAT_SEEK_CUR))
       {
           // error
       }
       // file_pos now contains the absolute file position

Parameters:

  `[in]` | fd | The file decriptor of the file on which to seek.
  `[in,out]` | offset | A pointer to the new offset, as affected by the `whence` parameter. The function writes the new absolute offset to this location before it returns.
  `[in]` | whence | Affects the way `offset` is interpreted, see above.

Returns:
  0 on failure, 1 on success.

void fat_set_file_modification_date | ( | struct fat_dir_entry_struct * | dir_entry,
|  | uint16_t | year,
|  | uint8_t | month,
|  | uint8_t | day |
| ) |  |  |

Sets the modification time of a date.

Parameters:

  `[in]` | dir_entry | The directory entry for which to set the modification date.
  `[in]` | year | The year the file was last modified.
  `[in]` | month | The month the file was last modified.
  `[in]` | day | The day the file was last modified.

void fat_set_file_modification_time | ( | struct fat_dir_entry_struct * | dir_entry,
|  | uint8_t | hour,
|  | uint8_t | min,
|  | uint8_t | sec |
| ) |  |  |

Sets the modification time of a file.

Parameters:

  `[in]` | dir_entry | The directory entry for which to set the modification time.
  `[in]` | hour | The year the file was last modified.
  `[in]` | min | The month the file was last modified.
  `[in]` | sec | The day the file was last modified.

intptr_t fat_write_file | ( | struct fat_file_struct * | fd,
|  | const uint8_t * | buffer,
|  | uintptr_t | buffer_len |
| ) |  |  |

Writes data to a file.

The data is written to the current file location.

Parameters:

  `[in]` | fd | The file handle of the file to which to write.
  `[in]` | buffer | The buffer from which to read the data to be written.
  `[in]` | buffer_len | The amount of data to write.

Returns:
  The number of bytes written (0 or something less than `buffer_len` on disk full) or -1 on failure.

See also:
  fat_read_file