MTK创建路径及文件读写测试

MTK创建路径及文件读写测试例程

提供一个MTK在FAT中创建路径及文件读写测试例程。

#define FILE_LEN_MAX    1024
#define S8 signed char
#define U16 unsigned short

//路径中带L和不带L的区别
//个人认为带L的路径代表的编码方式为Unicode,否则为ascii编码,没有相关资料证明,但软件测试结果通过。
#define T_USER_DIR_CONFIG       ("z:\\@dywz\\config\\")
#define T_USER_DIR_LOCATION     (L"z:\\@dywz\\location\\") 

extern int FS_Open(const WCHAR * FileName, kal_uint32 Flag);
static U16 AnsiiToUnicodeString(S8 *pOutBuffer, S8 *pInBuffer)
{
    return mmi_asc_to_ucs2(pOutBuffer, pInBuffer);
}

//open file with file Read-Only mode.
#define MODE_READ                   1

//open file with Read-Write mode. 
#define MODE_WRITE                  2

//open file with Read-Write mode, create if the file not exist.
#define MODE_CREATE_ALWAYS_WRITE    4

//open file with Append mode.
#define MODE_APPEND                 8


//************************************************************************
//  函数
//      vm_file_is_exist
//  功能
//      判断文件是否存在
//  输入
//      app_path    文件路径
//  输出
//      TRUE/FALSE
//************************************************************************/

// 可以用来判断配置文件是否存在。
static int vm_file_is_exist(short * app_path)
{
    int fd = -1;

    fd = vm_file_open(app_path,MODE_READ,TRUE);
    if(fd<0)
    {
        dbg_print("vm_file_is_exist: FALSE\r\n");
        return FALSE;
    }
    vm_file_close(fd);

    dbg_print("vm_file_is_exist: TRUE\r\n");
    return TRUE;
}

void FS_test()
{
    //文件句柄  
    FS_HANDLE h;     
    char filepath[128] = {0}; 
    char filepath_unicode[128] = {0};

    char filename[128] = {0};
    char filename_unicode[128] = {0};
    char config_filename[] = "location"; //动态文件名。文件内容写入测试

    //文件内容
    int readlen = 0;
    int size = 0;
    int written = 0;
    char buf_read_from_file[FILE_LEN_MAX] = {0};

    int i;

    //保存文件的路径不存在时要先创建路径
    h = vm_file_mkdir((short *)T_USER_DIR_LOCATION);
    dbg_print("T_USER_DIR_LOCATION handle:%d\r\n", h);

    if(h >= 0)
    {
        dbg_print("Creat dir Success.");
        vm_file_close(h);
    }

// 两种方式:
#if 1  //路径中带L,将文件名转码后拼接成路径
    strcat((char *)filename, (char *)config_filename);
    strcat((char *)filename, (char *)".txt");
    AnsiiToUnicodeString((S8*) filename_unicode, (S8*)filename);

    //VMINT vm_wstrcat(VMWSTR dst, const VMWSTR src)
    vm_wstrcat((short *)filepath_unicode, (short *)T_USER_DIR_LOCATION);
    vm_wstrcat((short *)filepath_unicode, (short *)filename_unicode);

#else   //路径中不带L,将路径字符串和文件名拼接好后转码成路径
    //创建文件
    strcat((char *)filepath, (char *)T_USER_DIR_CONFIG);
    //strcat((char *)filepath, (char *)T_USER_DIR_LOCATION);
    strcat((char *)filepath, (char *)config_filename);
    strcat((char *)filepath, (char *)".txt");
#if 1
    for(i = 0; i<strlen(filepath); i++)
    {
        dbg_print("%c", filepath[i]);
    }
    dbg_print("\r\n");
#endif

    //AnsiiToUnicodeString((S8*) UnicodeName, (S8*)"Z:\\test.txt");
    AnsiiToUnicodeString((S8*) filepath_unicode, (S8*)filepath);

#endif

    if(vm_file_is_exist((short *)filepath_unicode))
        h = (FS_HANDLE)FS_Open( (const WCHAR *)filepath_unicode, FS_READ_WRITE|FS_OPEN_SHARED);
    else
        h = (FS_HANDLE)FS_Open( (const WCHAR *)filepath_unicode, FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE);

    //h = (FS_HANDLE)FS_Open( (const WCHAR *)L"Z:\\@USER\\test.txt", FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE);
    //h = (FS_HANDLE)FS_Open( (const WCHAR *)filepath_unicode, FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE);

    dbg_print("FS_Open return:%d", h);

    // FS_open 正常,进行文件读写测试
    if(h >= 0)
    {
        dbg_print("\tSuccess!\r\n");


        FS_GetFileSize(h, &size);
        dbg_print("filesize:%d\r\n", size); 


        if(size > 0)
        {
            FS_Read(h, (void *)buf_read_from_file, size, &readlen);
            dbg_print("readlen:%d\t", readlen);
            dbg_print("readcontent:%s\r\n", buf_read_from_file);
        }
        else
        {
            //文件为空。
        }

        FS_Seek(h, 0, FS_FILE_END);  //定位到文件末尾,文件指针偏移为0。
        FS_Write(h, (void *)config_filename, strlen(config_filename), &written);
        dbg_print("write content to file:%s\t", config_filename);
        dbg_print("writelen:%d\r\n", written);

        FS_Commit(h);       
    }
    else
    {
        dbg_print("\tFail...\r\n");
    }

    FS_Close(h);    

    StartTimer(function_test_timer, 8000, FS_test);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值