本文主要是介绍FATFS学习笔记——FATFS写文件的两种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.以hex文件直接写:
适用于需要保存比较大的数据时,无需进行格式化处理,直接保存文件
FIL file;FRESULT res;UINT bytes_written;// 创建文件res = f_open(&file, "0:/FATFS/TestData.txt", FA_CREATE_ALWAYS | FA_WRITE);if (res != FR_OK) {printf("Failed to create file\n");return 1;}// 待写入的hex数组数据uint8_t hex_data[] = {0x12, 0x34, 0x56, 0x78,0x11,0x22,0x33};uint32_t data_size = sizeof(hex_data[0]);uint32_t data_count = sizeof(hex_data) / sizeof(hex_data[0]);// 写入数据res = f_write(&file, hex_data, data_size, &bytes_written);if (res != FR_OK) {printf("Failed to write data to file\n");f_close(&file);return 1;}// 关闭文件f_close(&file);printf("Data written to file successfully\n");
以这种形式写的时候,读的时候往往可以直接读出存储的数据,无需任何数据格式的转换,比如:直接将一个结构体变量数据存到FATFS 文件文本内,需要读取的时候,直接将读取的数据存储到相同的结构体变量内;
2 转化为格式化字符串的形式后再进行存放
//写fatfs 文件--写字符串数据 typedef struct {U8 Soft_Version[16];//软件版本号U8 Hard_Version[16];}MasterDP_t;MasterDP_t DP = {"V1.01","V1.01"};FIL file;FRESULT res;UINT bytes_written;// 创建文件res = f_open(&file, "0:/FATFS/TestData.txt", FA_CREATE_ALWAYS | FA_WRITE);if (res != FR_OK) {printf("Failed to create file\n");return 1;}// 待写入的数组bufferuint8_t temp_data[256] = {0};sprintf(temp_data,"HardVersion:%s,SoftVersion:%s",DP.Hard_Version,DP.Soft_Version);// 格式化字符串数据res = f_write(&file, temp_data, strlen(temp_data), &bytes_written);if (res != FR_OK) {printf("Failed to write data to file\n");f_close(&file);return 1;}// 关闭文件f_close(&file);printf("Data written to file successfully\n");
使用格式化字符串写文件的格式存储数据,读出时,往往需要进行字符串的截取,以上面的片段为例,往往需要先读取出文件的内容,然后查找指定字符子串的起始位置,随后赋值;
fr = f_open(&freadfil, "0:/FATFS/TestData.txt", FA_READ);if (0 == fr) {mymemset(ReadBuffer,0,sizeof(ReadBuffer));fr = f_read(&freadfil, ReadBuffer, sizeof(ReadBuffer), &br);//获取本地系统参数数据if(br != 0)//文件非空{u8 *ptr_h = (uint8_t*)strstr((const char*)ReadBuffer,"HardVersion:");//查找"HardVersion:"字符串起始位置u8 *ptr_s = (uint8_t*)strstr((const char*)ReadBuffer,",SoftVersion:");if(ptr_h != NULL && ptr_s != NULL && ptr_h < ptr_s){ptr_h += strlen("HardVersion:");u8 HardverLen = ptr_s - ptr_h;if(HardverLen > sizeof(DP.Hard_Version))HardverLen = 16;for(u32 i = 0;i < HardverLen;i++)DP.Hard_Version[i] = *ptr_h++;ptr_s += strlen(",SoftVersion:");for(u32 i = 0;i < HardverLen;i++)DP.Soft_Version[i] = *ptr_s++;}}f_close(&freadfil);}
这篇关于FATFS学习笔记——FATFS写文件的两种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!