eric2013 发表于 2022-7-20 01:49:04

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


附加模式:



/*
*********************************************************************************************************
*      函 数 名: CreateNewFile
*      功能说明: 在SD卡创建三个text文本,分别使用fwrite,fprintf和fputs写数据。
*      形    参: 无
*      返 回 值: 无
*********************************************************************************************************
*/
static void CreateNewFile(void)
{
      const uint8_t WriteText[] = {"安富莱"};
      const uint8_t WriteText1[] = {"函数名"};
      FILE *fout;
      uint8_t Readbuf;
      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);
                goto access_fail;
      }
      else
      {
                printf("挂载文件系统成功 (%s)\r\n", ReVal_Table);
      }
      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 = 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");
}



数据内容修改:



/*
*********************************************************************************************************
*      函 数 名: 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;

      /* 加载SD卡 */
      result = fmount("N0:");
      if(result != NULL)
      {
                /* 如果挂载失败,务必不要再调用FlashFS的其它API函数,防止进入硬件异常 */
                printf("挂载文件系统失败 (%s)\r\n", ReVal_Table);
                goto access_fail;
      }
      else
      {
                printf("挂载文件系统成功 (%s)\r\n", ReVal_Table);
      }
      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");
      
}



页: [1]
查看完整版本: RL-FlashFS的文件数据修改和文件内容附加模式实现