4. 创建文件

任务目标

在ThreadX FileX已挂载的文件系统中,通过fx_file_create创建一个新文件,并演示文件已存在(FX_ALREADY_EXISTS)与路径无效(FX_INVALID_PATH)两类错误场景的处理。

核心实现

以下代码在FileX初始化并挂载RAM磁盘后,依次执行:创建新文件、重复创建同名文件(触发已存在错误)、在非法目录路径下创建文件(触发路径无效错误)。每个操作后通过返回状态判断结果并打印对应信息。

#include "fx_api.h"

/* 假设fx_media已经通过fx_media_open挂载,且媒体有效 */
extern FX_MEDIA fx_media;

/* 创建文件并处理错误 */
UINT demo_create_file(void)
{
    UINT status;
    CHAR *file_name = "test_file.txt";
    CHAR *bad_path = "/nonexistent_dir/new_file.txt";

    /* 1. 正常创建新文件 */
    status = fx_file_create(&fx_media, file_name);
    if (status != FX_SUCCESS)
    {
        printf("创建文件失败,状态码: 0x%02X\n", status);
        return status;
    }
    printf("文件 %s 创建成功\n", file_name);

    /* 2. 重复创建同名文件,预期返回 FX_ALREADY_EXISTS (0x07) */
    status = fx_file_create(&fx_media, file_name);
    if (status == FX_ALREADY_EXISTS)
    {
        printf("文件已存在,错误处理正确 (0x%02X)\n", status);
    }
    else
    {
        printf("预期FX_ALREADY_EXISTS,实际状态码: 0x%02X\n", status);
        return status;
    }

    /* 3. 在无效路径下创建文件,预期返回 FX_INVALID_PATH (0x03) */
    status = fx_file_create(&fx_media, bad_path);
    if (status == FX_INVALID_PATH)
    {
        printf("路径无效,错误处理正确 (0x%02X)\n", status);
    }
    else
    {
        printf("预期FX_INVALID_PATH,实际状态码: 0x%02X\n", status);
        return status;
    }

    return FX_SUCCESS;
}

运行与验证

环境依赖:ThreadX与FileX库已编译链接,fx_media已通过fx_media_open成功挂载(如RAM磁盘或Flash介质)。

调用方式:在应用初始化线程中调用demo_create_file(),确保FileX已通过fx_system_initialize初始化。

验证方法:

  1. 正常创建:观察串口输出“文件 test_file.txt 创建成功”,且返回FX_SUCCESS。
  2. 重复创建:输出“文件已存在,错误处理正确 (0x07)”,证明FX_ALREADY_EXISTS被正确捕获。
  3. 无效路径:输出“路径无效,错误处理正确 (0x03)”,证明FX_INVALID_PATH被正确捕获。

通过条件:三个步骤均打印预期信息且函数最终返回FX_SUCCESS,即验证通过。若某步返回非预期状态码,则检查介质挂载路径与文件系统格式是否正确。

关键说明

FileX中fx_file_create的路径参数仅支持当前目录下的文件名,不支持多级目录路径。因此示例中"/nonexistent_dir/new_file.txt"会触发FX_INVALID_PATH。若需在子目录创建文件,应先用fx_directory_create创建目录并切换当前工作目录(fx_directory_change),再调用本函数。