<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
三、添加命令fchdrive、fmove。
1、目的
(1)fchdrive:在支持相对目录 的情况下改变当前逻辑磁盘。
(2)fmove:两个参数,将文件移动到另一个位置,可以改名,也可以保留原名。
2、fchdrive 命令的实现
(1)添加命令支持
这个不再赘述。
(2)实现代码
void UartCmdFChDrive(u8 argc,void **argv){
BYTE Drive;
FRESULT res="FR"_INVALID_DRIVE;
if ( *( (BYTE*)argv[1]+1 )==':' ){ 检查参数,是不是1:类似格式。
Drive =*( (BYTE*)argv[1]) - '0'; 取出磁盘号
res=f_chdrive( Drive ); }
if ( res!=FR_OK) { Uart_PutString( "Invalid path!\r\n");return;}
Uart_PutString( "Current disk is changed!\r\n");
}
*( (BYTE*)argv[1])这个意思是先将argv[1]转换为BYTE指针,再取出里面的数据(BYTE型,一个字节。)
以下是实现的截图:
3、fmove命令的实现
(1)这个命令带两个参数:第一个是文件的原有路径,第二个是新路径,同时可以更改文件名。
(2)实现的原理
以创建新文件的方式 打开新路径的文件。这样会创建一个目录项,填充一个文件信息结构体。然后打开原有路径的文件,也会得到一个文件信息结构体。将旧结构体的文件大小、起始簇号复制到新的结构体,然后更新新文件的信息。然后删除原有路径的文件。移动操作完成。
(3)代码编写
需要两次打开文件,所以需要两个文件信息结构体。
res = f_open ( &FileOld, (const char *)argv[1], FA_WRITE );
res = f_open ( &FileNew, (const char *)argv[2], FA_CREATE_NEW );
FileNew.fsize = FileOld.fsize; // 改变新文件的大小等于原文件
FileNew.org_clust = FileOld.org_clust; //新文件的簇等于原文件的簇。
FileNew.flag |= FA__WRITTEN; //文件属性已改变,需要更新
res=f_close ( &FileNew ); //关闭时进行更新。
res=f_unlink ( (const char *)argv[1] ); //删除原文件
编译,下载测试,功能正常。以下是实现的截图。
文章评论(0条评论)
登录后参与讨论