Skip to content

切换工作目录

李述铜

831字约3分钟

2024-08-08

提示

同学,你好,欢迎学习本课程!本课程是介绍了FATFS文件系统模块的基本使用,是一门相对较简单的课程。

如果你对文件系统的实现比较感兴趣,也可以关注我的《从0到1写FAT32文件系统》课程。

欢迎转载本文章,转载请注明链接来源,谢谢!

本节课时介绍切换工作目录的接口,在Linux有类似的接口: https://linux.die.net/man/3/chdir

应用场合

在以前的代码中,我们发现:所有的路径信息都是绝对路径,并没有使用相对路径。但是,在某些情况下,使用相对路径会更加地简单、方便。例如,以下代码对os_sem.c和os_task.c访问获取其文件。

	FILINFO info;
	f_stat(_T("0:/rtos/os_sem.c"), &info);
	f_stat(_T("0:/rtos/os_task.c"), &info);

上述代码似乎看不出来什么缺点。但是,在某些情况下,你可能会发现有些缺点:

  • 如果有多个os目录下的文件需要打开;那么就需要在代码中写多条完整的路径。这样会导致所有的这些路径中,前面一大半内容是相同的,造成空间的浪费
  • 如果所有路径发生了更改,那么所有的这些路径中,都需要将前面的部分统一更改。
  • 在某些情况下,可能只预先知道要打开的文件所在的目录,具体的文件名未知。这样当后续打开文件时,还需要先将目录路径和文件名拼接成完整的路径字符串,这样就非常麻烦。

所以,在某些情况下,我们可能希望能够实现一种切换操作,即:先切换到某个目录下,后续所有的文件操作中,路径只需要以当前目录为基础,使用相对路径

接口介绍

f_chdir 函数用于更改逻辑驱动器的当前目录。以下是该函数的详细说明:

FRESULT f_chdir(
  const TCHAR* path  /* [IN] 要设置为当前目录的路径名 */
);

函数参数

  • path:指向以 null 结尾的字符串,指定要设置为当前目录的目录。

返回值:

  • FR_OK:操作成功。
  • FR_DISK_ERR:磁盘错误。
  • FR_INT_ERR:发生了内部错误。
  • FR_NOT_READY:文件系统不可用。
  • FR_NO_PATH:指定路径无效。
  • FR_INVALID_NAME:无效的路径名。
  • FR_INVALID_DRIVE:无效的驱动器号。
  • FR_NOT_ENABLED:FatFs模块未启用。
  • FR_NO_FILESYSTEM:没有可用的文件系统。
  • FR_TIMEOUT:操作超时。
  • FR_NOT_ENOUGH_CORE:内存不足。

注意事项

与在Linux/Windows调用文件系统相关接口不同,这些系统中更改工作目录的函数会影响到当前应用程序后续所有文件的访问路径,即所有文件访问都以这个工作目录为基准。

而在FATFS中,更改工作目录这一操作是仅仅更改的是指定驱动器的工作目录,对其它驱动器上的文件访问无效。因此,可以针对不同的驱动器可设置不同的工作目录。后续在访问不同驱动器下的文件时,使用的工作路径即为该驱动器中保存的工作目录。