myFile.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. #include "myFile.h"
  2. /*
  3. *********************************************************************************************************
  4. * 函 数 名: int write_file(const char* filename, const char* data, uint32_t length)
  5. * 形 参:*fileName所创建的文件系统名称*data要写入字符串的首地址,总共要写入的数据长度。
  6. * 返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void write_file(const char* filename, const char* data, uint32_t length)
  10. {
  11. /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
  12. FRESULT result;
  13. FATFS fs;
  14. FIL file;
  15. DIR DirInf;
  16. uint32_t bw;
  17. /* 挂载文件系统 */
  18. result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */
  19. if (result != FR_OK)
  20. {
  21. printf("挂载文件系统失败 (%d)\r\n", result);
  22. }
  23. /* 打开根文件夹 */
  24. result = f_opendir(&DirInf, "0:/"); /* 0: 表示盘符 */
  25. if(result==FR_NO_FILESYSTEM) //如果返回值为无filesystem则创建文件系统
  26. {
  27. f_mkfs("0:",0,0);
  28. }
  29. if (result != FR_OK)
  30. {
  31. printf("打开根目录失败 (%d)\r\n", result);
  32. return ;
  33. }
  34. char filepath[30];
  35. sprintf(filepath, "0:/%s", filename);//为filename加入filepath前缀
  36. /* 打开文件 */
  37. result = f_open(&file, filepath, FA_CREATE_ALWAYS | FA_WRITE);
  38. /* 写一串数据 */
  39. result = f_write(&file,data, length, &bw);
  40. if (result == FR_OK)
  41. {
  42. printf("文件写入成功\r\n");
  43. }
  44. else
  45. {
  46. printf("文件写入失败\r\n");
  47. }
  48. /* 关闭文件*/
  49. f_close(&file);
  50. /* 卸载文件系统 */
  51. f_mount(NULL, FS_VOLUME_NAND, 0);
  52. }
  53. /*
  54. *********************************************************************************************************
  55. * 函 数 名: ReadFileData
  56. * 功能说明:
  57. * 形 参:无
  58. * 返 回 值: 无
  59. *********************************************************************************************************
  60. */
  61. void read_file(const char* filename, char* data)
  62. {
  63. /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
  64. FRESULT result;
  65. FATFS fs;
  66. FIL file;
  67. DIR DirInf;
  68. uint32_t bw;
  69. /* 挂载文件系统 */
  70. result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */
  71. if (result != FR_OK)
  72. {
  73. printf("挂载文件系统失败(%d)\r\n", result);
  74. }
  75. /* 打开根文件夹 */
  76. result = f_opendir(&DirInf, "0:/");
  77. if(result==FR_NO_FILESYSTEM) //如果返回值为无filesystem则创建文件系统
  78. {
  79. f_mkfs("0:",0,0);
  80. }
  81. if (result != FR_OK)
  82. {
  83. printf("打开根目录失败(%d)\r\n", result);
  84. goto _exit_file;
  85. }
  86. char filepath[30];
  87. sprintf(filepath, "0:/%s", filename);//为filename加入filepath前缀
  88. /* 打开文件 */
  89. result = f_open(&file, filepath, FA_OPEN_EXISTING | FA_READ);
  90. if (result != FR_OK)
  91. {
  92. printf("Don't Find File \r\n");
  93. goto _exit_file;
  94. }
  95. /* 读取文件 */
  96. result= f_read(&file, data, f_size(&file), &bw);
  97. if (bw > 0)
  98. {
  99. printf("\r\%s 文件内容 : \r\n%s\r\n", filename,data);
  100. }
  101. else
  102. {
  103. printf("\r\%s 文件内容 : \r\n",filename);
  104. }
  105. _exit_file:
  106. /* 关闭文件*/
  107. f_close(&file);
  108. /* 卸载文件系统 */
  109. f_mount(NULL, FS_VOLUME_NAND, 0);
  110. }
  111. /*
  112. *********************************************************************************************************
  113. * 函 数 名: ViewRootDir
  114. * 功能说明: 显示SD卡根目录下的文件名
  115. * 形 参:无
  116. * 返 回 值: 无
  117. *********************************************************************************************************
  118. */
  119. void ViewRootDir(void)
  120. {
  121. /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
  122. FRESULT result;
  123. FATFS fs;
  124. DIR DirInf;
  125. FILINFO FileInf;
  126. uint32_t cnt = 0;
  127. char lfname[256];
  128. /* 挂载文件系统 */
  129. result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */
  130. if (result != FR_OK)
  131. {
  132. printf("挂载文件系统失败 (%d)\r\n", result);
  133. }
  134. /* 打开根文件夹 */
  135. result = f_opendir(&DirInf, "0:/"); /* 0: 表示盘符 */
  136. if (result != FR_OK)
  137. {
  138. printf("打开根目录失败 (%d)\r\n", result);
  139. return;
  140. }
  141. /* 读取当前文件夹下的文件和目录 */
  142. FileInf.lfname = lfname;
  143. FileInf.lfsize = 256;
  144. printf("属性 | 文件大小 | 短文件名 | 长文件名\r\n");
  145. for (cnt = 0; ;cnt++)
  146. {
  147. result = f_readdir(&DirInf,&FileInf); /* 读取目录项,索引会自动下移 */
  148. if (result != FR_OK || FileInf.fname[0] == 0)
  149. {
  150. break;
  151. }
  152. if (FileInf.fname[0] == '.')
  153. {
  154. continue;
  155. }
  156. /* 判断是文件还是子目录 */
  157. if (FileInf.fattrib & AM_DIR)
  158. {
  159. printf("(0x%02d)目录 ", FileInf.fattrib);
  160. }
  161. else
  162. {
  163. printf("(0x%02d)文件 ", FileInf.fattrib);
  164. }
  165. /* 打印文件大小, 最大4G */
  166. printf(" %10d", FileInf.fsize);
  167. printf(" %s |", FileInf.fname); /* 短文件名 */
  168. printf(" %s\r\n", (char *)FileInf.lfname); /* 长文件名 */
  169. }
  170. /* 卸载文件系统 */
  171. f_mount(NULL, FS_VOLUME_NAND, 0);
  172. }
  173. /*
  174. *********************************************************************************************************
  175. * 函 数 名: DeleteDirFile
  176. * 功能说明: 删除SD卡根目录下的 armfly.txt 文件和 Dir1,Dir2 目录
  177. * 形 参:无
  178. * 返 回 值: 无
  179. *********************************************************************************************************
  180. */
  181. void DeleteDirFile(const char* filename)
  182. {
  183. /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
  184. FRESULT result;
  185. FATFS fs;
  186. char FileName[50];
  187. sprintf(FileName,"0:/%s",filename);
  188. uint8_t i;
  189. /* 挂载文件系统 */
  190. result = f_mount(&fs, FS_VOLUME_NAND, 0); /* Mount a logical drive */
  191. if (result != FR_OK)
  192. {
  193. printf("挂载文件系统失败 (%d)\r\n", result);
  194. }
  195. #if 0
  196. /* 打开根文件夹 */
  197. result = f_opendir(&DirInf, "0:/"); /* 如果不带参数,则从当前目录开始 */
  198. if (result != FR_OK)
  199. {
  200. printf("打开根目录失败(%d)\r\n", result);
  201. return;
  202. }
  203. #endif
  204. /* 删除文件 */
  205. result = f_unlink(FileName);
  206. if (result == FR_OK)
  207. {
  208. printf("删除文件 %s 成功\r\n",filename);
  209. }
  210. else if (result == FR_NO_FILE)
  211. {
  212. printf("没有发现文件或目录 :%s\r\n", filename);
  213. }
  214. else
  215. {
  216. printf("删除%s失败(错误代码 = %d) 文件只读或目录非空\r\n",filename,result);
  217. }
  218. /* 卸载文件系统 */
  219. f_mount(NULL, FS_VOLUME_NAND, 0);
  220. }