123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #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);
- }
|