#include "myFile.h" /* ********************************************************************************************************* * 函 数 名: int write_file(const char* filename, const char* data, uint32_t length) * 形 参:*fileName所创建的文件系统名称*data要写入字符串的首地址,总共要写入的数据长度。 * 返 回 值: 无 ********************************************************************************************************* */ void write_file(const char* filename, const char* data, uint32_t length) { /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */ FRESULT result; FATFS fs; FIL file; DIR DirInf; uint32_t bw; /* 挂载文件系统 */ result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */ if (result != FR_OK) { printf("挂载文件系统失败 (%d)\r\n", result); } /* 打开根文件夹 */ result = f_opendir(&DirInf, "0:/"); /* 0: 表示盘符 */ if(result==FR_NO_FILESYSTEM) //如果返回值为无filesystem则创建文件系统 { f_mkfs("0:",0,0); } if (result != FR_OK) { printf("打开根目录失败 (%d)\r\n", result); return ; } char filepath[30]; sprintf(filepath, "0:/%s", filename);//为filename加入filepath前缀 /* 打开文件 */ result = f_open(&file, filepath, FA_CREATE_ALWAYS | FA_WRITE); /* 写一串数据 */ result = f_write(&file,data, length, &bw); if (result == FR_OK) { printf("文件写入成功\r\n"); } else { printf("文件写入失败\r\n"); } /* 关闭文件*/ f_close(&file); /* 卸载文件系统 */ f_mount(NULL, FS_VOLUME_NAND, 0); } /* ********************************************************************************************************* * 函 数 名: ReadFileData * 功能说明: * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void read_file(const char* filename, char* data) { /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */ FRESULT result; FATFS fs; FIL file; DIR DirInf; uint32_t bw; /* 挂载文件系统 */ result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */ if (result != FR_OK) { printf("挂载文件系统失败(%d)\r\n", result); } /* 打开根文件夹 */ result = f_opendir(&DirInf, "0:/"); if(result==FR_NO_FILESYSTEM) //如果返回值为无filesystem则创建文件系统 { f_mkfs("0:",0,0); } if (result != FR_OK) { printf("打开根目录失败(%d)\r\n", result); goto _exit_file; } char filepath[30]; sprintf(filepath, "0:/%s", filename);//为filename加入filepath前缀 /* 打开文件 */ result = f_open(&file, filepath, FA_OPEN_EXISTING | FA_READ); if (result != FR_OK) { printf("Don't Find File \r\n"); goto _exit_file; } /* 读取文件 */ result= f_read(&file, data, f_size(&file), &bw); if (bw > 0) { printf("\r\%s 文件内容 : \r\n%s\r\n", filename,data); } else { printf("\r\%s 文件内容 : \r\n",filename); } _exit_file: /* 关闭文件*/ f_close(&file); /* 卸载文件系统 */ f_mount(NULL, FS_VOLUME_NAND, 0); } /* ********************************************************************************************************* * 函 数 名: ViewRootDir * 功能说明: 显示SD卡根目录下的文件名 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void ViewRootDir(void) { /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */ FRESULT result; FATFS fs; DIR DirInf; FILINFO FileInf; uint32_t cnt = 0; char lfname[256]; /* 挂载文件系统 */ result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */ if (result != FR_OK) { printf("挂载文件系统失败 (%d)\r\n", result); } /* 打开根文件夹 */ result = f_opendir(&DirInf, "0:/"); /* 0: 表示盘符 */ if (result != FR_OK) { printf("打开根目录失败 (%d)\r\n", result); return; } /* 读取当前文件夹下的文件和目录 */ FileInf.lfname = lfname; FileInf.lfsize = 256; printf("属性 | 文件大小 | 短文件名 | 长文件名\r\n"); for (cnt = 0; ;cnt++) { result = f_readdir(&DirInf,&FileInf); /* 读取目录项,索引会自动下移 */ if (result != FR_OK || FileInf.fname[0] == 0) { break; } if (FileInf.fname[0] == '.') { continue; } /* 判断是文件还是子目录 */ if (FileInf.fattrib & AM_DIR) { printf("(0x%02d)目录 ", FileInf.fattrib); } else { printf("(0x%02d)文件 ", FileInf.fattrib); } /* 打印文件大小, 最大4G */ printf(" %10d", FileInf.fsize); printf(" %s |", FileInf.fname); /* 短文件名 */ printf(" %s\r\n", (char *)FileInf.lfname); /* 长文件名 */ } /* 卸载文件系统 */ f_mount(NULL, FS_VOLUME_NAND, 0); } /* ********************************************************************************************************* * 函 数 名: DeleteDirFile * 功能说明: 删除SD卡根目录下的 armfly.txt 文件和 Dir1,Dir2 目录 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void DeleteDirFile(const char* filename) { /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */ FRESULT result; FATFS fs; char FileName[50]; sprintf(FileName,"0:/%s",filename); uint8_t i; /* 挂载文件系统 */ result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */ if (result != FR_OK) { printf("挂载文件系统失败 (%d)\r\n", result); } #if 0 /* 打开根文件夹 */ result = f_opendir(&DirInf, "0:/"); /* 如果不带参数,则从当前目录开始 */ if (result != FR_OK) { printf("打开根目录失败(%d)\r\n", result); return; } #endif /* 删除文件 */ result = f_unlink(FileName); if (result == FR_OK) { printf("删除文件 %s 成功\r\n",filename); } else if (result == FR_NO_FILE) { printf("没有发现文件或目录 :%s\r\n", filename); } else { printf("删除%s失败(错误代码 = %d) 文件只读或目录非空\r\n",filename,result); } /* 卸载文件系统 */ f_mount(NULL, FS_VOLUME_NAND, 0); }