金牌会员
 
- 积分
- 2100
- 金钱
- 2100
- 注册时间
- 2013-11-27
- 在线时间
- 518 小时
|
5金钱
wenjian_num = FileScan("wenjian");
/***********获取本机IP*************/
FileRead("0:sys.txt",buffer,60);
两句话调换位置的话,全速运行就会出现异常中断,要是单步就是好的,如果是以上的顺序就是好的。
下面是函数原型
BYTE FileScan(BYTE *path)
{
// FATFS fs; // 建立一个文件系统
// FRESULT res; // 存储函数执行结果
FILINFO finfo; // 存储文件状态信息
DIR dir; // 暂存路径
TCHAR *fn; // 暂存文件名
INT fileNum = 0; // 初始化文件个数
INT size; // 文件名长度
f_mount(0, &fs); // 加载文件系统
res = f_opendir(&dir, (const TCHAR *)path); // 打开路径目录
if (res == FR_OK) // 路径打开成功
{
while (f_readdir(&dir, &finfo) == FR_OK) //循环读取目录,直到读完
{
// #if _USE_LFN // 长文件名
#if 0 // 长文件名
fn = *finfo.lfname ? finfo.lfname : finfo.fname;
#else // 短文件名
fn = finfo.fname;
#endif
if((finfo.fattrib & AM_DIR)||(finfo.fattrib & AM_ARC)) //如果是文件夹(AM_DIR)、或是文件(AM_ARC)
{
if(!fn[0])break; //如果读完,跳出循环
size=strlen(fn); //获得文件名长度
if(finfo.fattrib & AM_DIR)flag[fileNum]=0; //判断如果是文件夹,给个标记
if(finfo.fattrib & AM_ARC) //判断如果是文件
{
if(strcasecmp(&fn[size-3],type[0])==0)flag[fileNum]=1;//再次判断如果是bmp图片 //当前文件标志问置1
else if(strcasecmp(&fn[size-3],type[1])==0)flag[fileNum]=2;//如果是文本文档
else if(strcasecmp(&fn[size-3],type[2])==0)flag[fileNum]=3;//如果是exe文件
else if(strcasecmp(&fn[size-3],type[3])==0)flag[fileNum]=4;//如果是pdf文件
else if(strcasecmp(&fn[size-3],type[4])==0)flag[fileNum]=5;//如果是word文本文档
else if(strcasecmp(&fn[size-3],type[5])==0)flag[fileNum]=6;//如果是execl文件
else if(strcasecmp(&fn[size-3],type[6])==0)flag[fileNum]=7;//如果是zip文件
else if(strcasecmp(&fn[size-3],type[7])==0)flag[fileNum]=7;//如果是rar文件
else flag[fileNum] = 88; //当前文件标志问置2
}
strcpy(FileN[fileNum],fn); //文件名复制给FileN数组保存
fileNum++; //查找下一个,fileNum为总文件数
}
}
}
f_mount(0, 0); // 卸载文件系统
return fileNum; // 返回文件个数
}
FRESULT FileRead(const TCHAR *fileName, uint8_t *buf,u16 len)
{
u8 i;
// FATFS fs; // 建立一个文件系统
// FIL file; // 暂存文件
UINT br; // 字节计数器
// FRESULT res; // 存储函数执行结果
f_mount(0,&fs); // 加载文件系统
res = f_open(&file, fileName, FA_OPEN_EXISTING|FA_READ); // 打开文件
if(res != FR_OK) // 如果没有正确打开文件
{
return res; // 返回错误报告
}
else // 如果打开了文件
{
for(i=0;i<len/512;i++)
{
res=f_read(&file,buf,512,&br);
}
if(len%512)
{
res=f_read(&file,buf,len%512,&br);
}
}
f_close(&file); // 关闭文件,必须和f_open函数成对出现
// GPIO1->DATA &= ~(1<<10);
f_mount(0,0); // 卸载文件系统
return res;
}
还有一个问题,路径什么时候前面需要加0:什么时候不需要完整的路径呢? |
最佳答案
查看完整内容[请看2#楼]
FILINFO finfo; // 存储文件状态信息
DIR dir; // 暂存路径
放全局变量.再试试
然后,貌似没有不需要完整路径的时候....
|