! J- j' h" R$ y# L# [) p/ b I
分享一个STM32移植FAFTS文件系统遍历创建文件夹
) v1 D n) o* ^( J ?( Y- FRESULT folder_create(char* path)) F+ X( O& @) K* o& U( g( a
- {4 s% _: M& B" ^# T+ r$ C) ~
- FRESULT res;
1 @+ p* \" V6 b! c - DIR dir;+ L, Y7 T9 e6 u0 s2 L' F- Z: a
- char *str = path;
- [% F- _' i' X/ s$ g+ y - char *pbuf;& _ F! t2 B2 ^$ p
- u16 cnt=0;# j9 S) L6 ]8 E6 m: ^$ E
-
- R+ p6 P9 _$ k* r - res = f_opendir(&dir, path);
; u# i8 B7 h' X8 o. z; Q6 R - if (res == FR_OK) & _7 \; ^% F5 C! ]* |2 ^
- {
0 M- T0 m# n: N - f_closedir(&dir);
+ X' m R6 H$ V8 w- x - return FR_OK;
, c) m+ M/ o8 s% K1 m - }
- J7 A2 H& e! Y0 ?$ r9 f - else
: b) }( O8 O& ~3 k9 x - {0 q: r( D5 b! @! X# O
- pbuf=mymalloc(SRAMIN,200);
O% m+ c V7 L - if(pbuf==NULL)
8 y6 }+ U" ]; A: X - return FR_NOT_ENOUGH_CORE; 5 x; x. N4 N9 l
- while(*str !=0)- I( k# T5 } v+ j
- {
1 @% ?0 x5 \7 @* `/ I; F" { - if(*str=='/')+ r# d( R4 a$ g! j( f3 n1 R
- {7 \+ r8 m9 R; | i4 o6 o" o' W
- memset(pbuf,0x00,200);
. J6 t/ B, ]+ B3 W - memcpy(pbuf,path,cnt);" ^* ^; C) D/ A# Y) _
- printf("%s\r\n",pbuf);
. o% J1 s6 \/ X5 G2 y - : F1 `0 t, `) @. u' n7 _% W, D
- if(f_opendir(&dir, pbuf)==FR_NO_PATH)
# H3 m P1 \0 i& y" I% h) n3 R - f_mkdir(pbuf);( u9 \3 q$ a- n, C3 v% [9 O: o
- else. \0 }- U, P& z( f* U; ~ U5 |
- f_closedir(&dir);
* l+ f6 b F; y- R - }
?# I6 C: y8 k" l - + e- [9 V- \: T, U: `" {
- cnt++;6 r' } e: W& d" h3 z5 v/ g
-
9 i8 ]6 [, V( i% v' x0 o - str++;
2 C$ a5 P7 s5 u - }
& S7 ?5 z8 T+ u0 M - myfree(SRAMIN,pbuf);
) @+ m2 _ n/ z" C$ L% z/ T+ ~3 h% o - res = f_mkdir(path);//创建最后一级目录
5 t9 o, K0 Z2 n/ n1 w; L - 2 d2 D2 z( c0 L# U0 w% ]& u
- }2 c: Q! v7 Q$ t& E
- return res;
$ y8 v0 y7 _) u2 a2 S I - }
?9 p5 Z2 e5 o2 A/ E/ z
复制代码 调用方法:, g5 F$ U; s& I- [+ X' U* q
- folder_create("0:/ccc/x1/x2/x3/x4/x5/x6/x7/x8");
4 I& B7 ?9 J; L
复制代码
: |$ `; S: S: m- F) @! z- \9 z& [# O6 o- W" _1 {
. m8 m$ ]$ E6 @) k1 T9 e9 n9 Q! Q+ p7 s$ b6 K" ?3 Z
|
#include <stdlib.h>
#define LRC_TABLE_MAX 100
static uint16_t g_usaLrcTimeTable[LRC_TABLE_MAX]; //记录歌词时间
static char g_caLrcTextTable[LRC_TABLE_MAX][100]; //记录歌词文本
static uint8_t g_ucLrcTableIndex; //歌词"时间/文件表"的索引值" U' f" x% V* O4 h' I2 W5 w% S
/*****************************************************************************\, L4 P; [6 R# {; f
函数功能:歌词解析
形参说明:_cpLrcPath 歌词路径' h# P3 h1 A, S. ]' F S+ Q' h
返 回 值:0 - 成功 / 1 - 失败( P/ H2 i$ Q% B$ _5 S
\*****************************************************************************/
u8 VS1053B_Parse_MusicLrc(const char *_cpLrcPath)
{: m) Y2 i6 v3 u- M& u
//变量定义. O6 V) {# t' v9 y4 }2 {, ?3 ^
FIL fp; //文件指针: [1 _) T/ ?% a1 N' J
FRESULT res; //文件系统返回值8 P* e- L! ]1 z ]0 P4 C4 x
UINT br; //成功读取的字节数
" ?% C: u" S- o- A
uint16_t usTime = 0; //用于临时存放转换计算后的时间) r' M! V* h, Y) _- c/ |1 z
uint32_t ulFileSize; //歌词文件总大小0 [) k( a8 A, I! g4 d
uint32_t i = 0, j = 0; //临时变量
char *ptmp = NULL; //歌词内容指针) y- \1 ]- K) s5 ]3 o6 n& a
char *pbuff = NULL; //用于存放所有歌词内容* C. C2 c$ L) @. n
//打开文件( m- X% e$ B4 [- V+ c
res = f_open(&fp, _cpLrcPath, FA_READ);
if (res == FR_OK)( R# e! E! G) ? Z9 w
{: M5 H% N0 J$ U. s) v+ F: h
//计算文件大小
ulFileSize = f_size(&fp);* L. {' r% }& Q& [) n4 }1 ]
//申请空间7 d; r& E- R; Y+ F/ m
pbuff = malloc(ulFileSize);8 Y$ I9 V" \* D: k; ~, _
if (pbuff != NULL)) `5 E0 g3 g" h9 t, V
{; y. c# n4 K2 n0 C
//一次性将总缓冲区读满6 |+ ^$ c! d3 ?7 ^1 R4 Y
res = f_read(&fp, pbuff, ulFileSize, &br);/ ^+ U9 W1 T' E, W
if (res == FR_OK && br == ulFileSize)
{
//找到歌词的起始位置% j( I; q" O( |! D, O* H. L
i = 0;
ptmp = strstr(pbuff, "[");
while (ptmp[i] != '\0') //遍历缓冲区中的信息5 s7 t* Z; i; b* c
{% T4 P" m3 A: t+ x
/**********************解析时间**********************/5 R! e2 Q9 {2 D% v
//[00:40.452]
//[分:秒.毫秒]8 V4 m0 @/ M4 c' ?6 t
usTime = 0;
//计算该行歌词播放时间(秒),毫秒部分四舍五入
usTime += (ptmp[i++] - '0') * 60 * 10; //分(十位)
usTime += (ptmp[i++] - '0') * 60 * 1; //分(个位)
i++; // ':'. S/ X* [3 y! a8 _+ c* K
usTime += (ptmp[i++] - '0') * 10; //秒(十位)
usTime += (ptmp[i++] - '0') * 1; //秒(个位)4 a: l: ] U# K i# J
i++; // '.'
if (ptmp[i++] >= 5) usTime++;
//手动调整时间误差3 q' d4 Y* e$ b5 [3 A4 l: k
if (usTime > 5) usTime -= (usTime / 10 + 1);
//保存时间7 B Y* X6 x/ u4 g
g_usaLrcTimeTable[g_ucLrcTableIndex] = usTime;
printf("%02d:%02d ", usTime/60, usTime%60);$ h' L& _+ j9 \
/**********************拷贝歌词**********************/' M5 u$ ]8 j0 ^0 S
j = 0;0 ~1 x, y! e1 P N
//让指针偏移到歌词文本部分
while (ptmp[i++] != ']');
//拷贝歌词内容
while (ptmp[i] != '\0' && ptmp[i] != '[') & r% o& B3 C4 x8 V+ Q+ Z* u
{
g_caLrcTextTable[g_ucLrcTableIndex][j++] = ptmp[i++];
} 5 g3 O! \$ [- p6 c: U
//制作成字符串( ?' ]9 ~* o! M* X8 d) H k
g_caLrcTextTable[g_ucLrcTableIndex][j] = '\0';
printf("%s\r\n", g_caLrcTextTable[g_ucLrcTableIndex]);8 \6 Q- d# p1 P& U
g_ucLrcTableIndex++;
}
}
free(pbuff);
} ) p: ~7 s9 B# X8 q) O, A- o
f_close(&fp);3 E* }, }& M' W5 O
}7 t% B( R: m7 v
if (i != 0) return 0;
else return 1;
}. C: i- n2 h3 z( E& r' d