|
我现在用的是安富莱的文件复制程序,因为我要复制多个文件,但发现复制完一个文件后内存并没有释放,所以多个文件复制时点内存很大。请高手指教如何复制一个文件后释放内存。程序原码如下:
FRESULT CopyData(u16 earliest,u16 late)
{
FATFS fs[2]; /* 逻辑驱动器的工作区(文件系统对象) */
FIL fsrc, fdst; /* 文件对象 */
BYTE buffer[512]; /* 文件拷贝缓冲区 */
FRESULT res; /* FatFs 函数公共结果代码 */
UINT br, bw; /* 文件读/写字节计数 */
DIR DirInf;
FILINFO FileInf;
uint32_t cnt = 0;
char name0[16],name2[16];
printf("开始 \r\n");
/* 为逻辑驱动器注册工作区 */
f_mount(FS_SD, &fs[0]);
printf("挂载文件系统成功 \r\n");
res=f_opendir(&DirInf, "0:/");
if(res)
{
Alarm=FSOPENDIRFAIL;
printf("打开根目录失败 (%d)\r\n", res);
}
f_mount(FS_USB, &fs[1]);
for (cnt = 0; ;cnt++)
{
res = f_readdir(&DirInf,&FileInf); /* 读取目录项,索引会自动下移 */
if (res != FR_OK || FileInf.fname[0] == 0)
{ printf("读取目录失败 (%d)\r\n", res);
break;
}
if (FileInf.fname[0] == '.')
{
continue;
}
/* 找出选择的文件 */
if((FileInf.fdate>=earliest)&&(FileInf.fdate<=late))
{
strcpy(name0,"0:");
strcpy(name2,"2:");
strcat(name0,FileInf.fname);
strcat(name2,FileInf.fname);
/* 打开驱动器 0 上的源文件 */
res = f_open(&fsrc, name0, FA_OPEN_EXISTING | FA_READ);
if (res)
{printf("打开文件失败 (%d)\r\n",res);
return(res);
}
printf("打开文件成功 (%d)\r\n",res);
/* 在驱动器 2 上创建目标文件 */
res = f_open(&fdst, name2, FA_CREATE_ALWAYS | FA_WRITE);
if (res)
{printf("打开文件失败 (%d)\r\n",res);
return(res);
}
printf("打开文件成功 (%d)\r\n",res);
/* 拷贝源文件到目标文件 */
for (;;) {
res = f_read(&fsrc, buffer, sizeof(buffer), &br);
if (res || br == 0) break; /* 文件结束错误 */
res = f_write(&fdst, buffer, br, &bw);
if (res || bw < br) break; /* 磁盘满错误 */
}
printf("拷贝文件成功 \r\n");
/* 关闭打开的文件 */
f_close(&fsrc);
f_close(&fdst);
printf("关闭文件成功 \r\n");
}
}
/* 注销工作区(在废弃前) */
f_mount(FS_SD, NULL);
f_mount(FS_USB, NULL);
printf("卸载文件成功 \r\n");
return(FR_OK);
} |
|