硬汉嵌入式论坛

 找回密码
 立即注册
查看: 982|回复: 0
收起左侧

[RL-FlashFS] RL-FlashFS的文件数据修改和文件内容附加模式实现

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
发表于 2022-7-20 01:49:04 | 显示全部楼层 |阅读模式

附加模式:

image.png

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*        函 数 名: CreateNewFile
*        功能说明: 在SD卡创建三个text文本,分别使用fwrite,fprintf和fputs写数据。
*        形    参: 无
*        返 回 值: 无
*********************************************************************************************************
*/
static void CreateNewFile(void)
{
        const uint8_t WriteText[] = {"安富莱"};
        const uint8_t WriteText1[] = {"函数名"};
        FILE *fout;
        uint8_t Readbuf[200];
        FILE *fin;
        uint32_t bw;
        uint32_t i = 2;
        uint8_t result;

        /* 加载SD卡 */
        result = fmount("N0:");
        if(result != NULL)
        {
                /* 如果挂载失败,务必不要再调用FlashFS的其它API函数,防止进入硬件异常 */
                printf("挂载文件系统失败 (%s)\r\n", ReVal_Table[result]);
                goto access_fail;
        }
        else
        {
                printf("挂载文件系统成功 (%s)\r\n", ReVal_Table[result]);
        }
        printf("------------------------------------------------------------------\r\n");
        
        /**********************************************************************************************************/
        /* 打开文件夹test中的文件test1.txt,如果没有子文件夹和txt文件会自动创建*/
        fout = fopen ("N0:\\test3.txt", "a"); 
        if (fout != NULL) 
        {
                /* 写数据 */
                bw = fwrite (WriteText, sizeof(uint8_t), strlen((char *)WriteText), fout);
                /* 关闭文件 */
                fclose(fout);
        }
        else
        {
                printf("打开文件N0:\\test\\test.txt失败\r\n");
        }
        
        /* 打开文件夹test中的文件test1.txt */
        fin = fopen ("N0:\\test3.txt", "r"); 
        if (fin != NULL) 
        {
                memset(Readbuf, 0, sizeof(Readbuf));
                /* 读数据 */
                bw = fread(Readbuf, sizeof(uint8_t), sizeof(Readbuf), fin);

                Readbuf[bw] = NULL;
                printf("test1.txt 文件内容 : \r\n%s\r\n", Readbuf);

                /* 关闭文件 */
                fclose(fin);
        }
        else
        {
                printf("打开文件N0:\\test\\test.txt失败, 可能文件不存在\r\n");
        }
        
        /* 打开文件夹test中的文件test1.txt,如果没有子文件夹和txt文件会自动创建*/
        fout = fopen ("N0:\\test3.txt", "w");
        fseek (fin, 2L, SEEK_SET); 
        if (fout != NULL) 
                
        {
                /* 写数据 */
                bw = fwrite (WriteText1, sizeof(uint8_t), strlen((char *)WriteText1), fout);
                
                /* 关闭文件 */
                fclose(fout);
        }
        else
        {
                printf("打开文件N0:\\test\\test.txt失败\r\n");
        }
        
        /* 打开文件夹test中的文件test1.txt */
        fin = fopen ("N0:\\test3.txt", "r"); 
        if (fin != NULL) 
        {
                /* 防止警告 */
                (void) WriteText;
                
                memset(Readbuf, 0, sizeof(Readbuf));
                /* 读数据 */
                bw = fread(Readbuf, sizeof(uint8_t), sizeof(Readbuf), fin);
                printf("test1.txt 文件内容 : \r\n%s\r\n", Readbuf);

                
                /* 关闭文件 */
                fclose(fin);
        }
        else
        {
                printf("打开文件N0:\\test\\test.txt失败, 可能文件不存在\r\n");
        }

access_fail:        
        /* 卸载SD卡 */
        result = funmount("N0:");
        if(result != NULL)
        {
                printf("卸载文件系统失败\r\n");
        }
        else
        {
                printf("卸载文件系统成功\r\n");
        }

        printf("------------------------------------------------------------------\r\n");
}



数据内容修改:
image.png


[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*        函 数 名: SeekFileData
*        功能说明: 创建一个text文本,在指定位置对其进行读写操作。
*        形    参: 无
*        返 回 值: 无
*********************************************************************************************************
*/
static void SeekFileData(void)
{
        const uint8_t WriteText[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"};
        FILE *fin, *fout;
        uint32_t bw;
        uint32_t uiPos;
        uint8_t ucChar;
        uint8_t result;
        uint8_t Readbuf[100];

        /* 加载SD卡 */
        result = fmount("N0:");
        if(result != NULL)
        {
                /* 如果挂载失败,务必不要再调用FlashFS的其它API函数,防止进入硬件异常 */
                printf("挂载文件系统失败 (%s)\r\n", ReVal_Table[result]);
                goto access_fail;
        }
        else
        {
                printf("挂载文件系统成功 (%s)\r\n", ReVal_Table[result]);
        }
        printf("------------------------------------------------------------------\r\n");
        
        /**********************************************************************************************************/
        /* 打开文件夹test中的文件test1.txt,如果没有子文件夹和txt文件会自动创建*/
        fout = fopen ("N0:\\test.txt", "w"); 
        if (fout != NULL) 
        {
                printf("打开文件N0:\\test.txt成功,如果没有txt文件会自动创建\r\n");
                /* 写数据 */
                bw = fwrite (WriteText, sizeof(uint8_t), sizeof(WriteText)/sizeof(uint8_t), fout);
                if(bw == sizeof(WriteText)/sizeof(uint8_t))
                {
                        printf("写入内容成功\r\n");
                }
                else
                { 
                        printf("写入内容失败\r\n");
                }
                        
                /* 关闭文件 */
                fclose(fout);
        }
        else
        {
                printf("打开文件N0:\\test.txt失败\r\n");
        }
        
        /* 打开文件夹test中的文件test1.txt */
        fin = fopen ("N0:\\test.txt", "r"); 
        if (fin != NULL) 
        {
                /* 防止警告 */
                (void) WriteText;
                
                memset(Readbuf, 0, sizeof(Readbuf));
                /* 读数据 */
                bw = fread(Readbuf, sizeof(uint8_t), sizeof(Readbuf), fin);
                printf("test1.txt 文件原始内容 : \r\n%s\r\n", Readbuf);

                
                /* 关闭文件 */
                fclose(fin);
        }
        else
        {
                printf("打开文件N0:\\test\\test.txt失败, 可能文件不存在\r\n");
        }
        
        /***********************************************/
        fin = fopen ("N0:\\test.txt","r+");
        if (fin != NULL)  
        {        
                fseek (fin, 2L, SEEK_SET);
                
                ucChar = fputs ("123W567", fin);
                /* 刷新数据到文件内 */
                fflush(fin);

                /* 关闭*/
                fclose (fin);
        }
        else
        {
                printf("打开文件N0:\\test.txt失败\r\n");
        }
        
        /* 打开文件夹test中的文件test1.txt */
        fin = fopen ("N0:\\test.txt", "r"); 
        if (fin != NULL) 
        {
                /* 防止警告 */
                (void) WriteText;
                
                memset(Readbuf, 0, sizeof(Readbuf));
                /* 读数据 */
                bw = fread(Readbuf, sizeof(uint8_t), sizeof(Readbuf), fin);
                printf("test.txt 修改后文件内容 : \r\n%s\r\n", Readbuf);

                
                /* 关闭文件 */
                fclose(fin);
        }
        else
        {
                printf("打开文件N0:\\test\\test.txt失败, 可能文件不存在\r\n");
        }

        
access_fail:        
        /* 卸载SD卡 */
        result = funmount("N0:");
        if(result != NULL)
        {
                printf("卸载文件系统失败\r\n");
        }
        else
        {
                printf("卸载文件系统成功\r\n");
        }

        printf("------------------------------------------------------------------\r\n");
        
}




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-25 23:59 , Processed in 0.155535 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表