fdt.c
来自「Atmega64单片机程序(完整工程)」· C语言 代码 · 共 763 行 · 第 1/2 页
C
763 行
if(FileName[0]==DEL_FDT)
{
FileName[0]=ESC_FDT ;
}
while(1)
{
temp=GetFDTInfo(Rt,Drive,ClusIndex,i);
if(temp!=RETURN_OK)
{
break ;
}
if(Rt->Name[0]==EMPTY_FDT)
{
temp=NOT_FIND_FDT ;
break ;
}
if((Rt->Attr&ATTR_VOLUME_ID)==0)
if(FileName[0]==Rt->Name[0])
if(FileName[1]==Rt->Name[1])
if(FileName[2]==Rt->Name[2])
if(FileName[3]==Rt->Name[3])
if(FileName[4]==Rt->Name[4])
if(FileName[5]==Rt->Name[5])
if(FileName[6]==Rt->Name[6])
if(FileName[7]==Rt->Name[7])
if(FileName[8]==Rt->Name[8])
if(FileName[9]==Rt->Name[9])
if(FileName[10]==Rt->Name[10])
{
temp=RETURN_OK ;
break ;
}
i++;
}
if(FileName[0]==ESC_FDT)
{
FileName[0]=DEL_FDT ;
}
return temp ;
}
/*********************************************************************************************************
** 函数名称: AddFDT
** 功能描述: 在指定目录查增加指定文件(目录)
**
** 输 入: Rt:存储返回信息的指针
** Drive:驱动器号
** ClusIndex:目录首簇号
** FileName:文件(目录)名
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: FindFDTInfo,GetFDTInfo,SetFDTInfo
**
********************************************************************************************************/
INT8U AddFDT(INT8U Drive,INT32U ClusIndex,FDT *FDTData)
{
Disk_Info *Disk ;
INT32U i ;
FDT TempFDT ;
INT8U temp ;
Disk=GetDiskInfo(Drive);
if(Disk==NULL)
{
return NOT_FIND_DISK ;
}
if(ClusIndex==EMPTY_CLUS)
if(Disk->FATType==FAT32)
{
ClusIndex=Disk->RootDirTable ;
}
temp=FindFDTInfo(&TempFDT,Drive,ClusIndex,FDTData->Name);
if(temp==RETURN_OK)
{
return FDT_EXISTS ;
}
if(temp!=NOT_FIND_FDT)
if(temp!=FDT_OVER)
{
return temp ;
}
if(FDTData->Name[0]==DEL_FDT)
{
FDTData->Name[0]=ESC_FDT ;
}
i=0 ;
temp=RETURN_OK ;
while(temp==RETURN_OK)
{
temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
if(temp==RETURN_OK)
{
if(TempFDT.Name[0]==DEL_FDT||TempFDT.Name[0]==EMPTY_FDT)
{
temp=SetFDTInfo(Drive,ClusIndex,i,FDTData);
break ;
}
}
i++;
}
if(temp==FDT_OVER)
if(ClusIndex!=EMPTY_CLUS)
{
i=FATAddClus(Drive,ClusIndex);
temp=DISK_FULL ;
if(i!=BAD_CLUS)
{
ClearClus(Drive,i);
temp=SetFDTInfo(Drive,i,0,FDTData);
}
}
if(FDTData->Name[0]==ESC_FDT)
{
FDTData->Name[0]=DEL_FDT ;
}
return temp ;
}
/*********************************************************************************************************
** 函数名称: DelFDT
** 功能描述: 在指定目录删除指定文件(目录)
**
** 输 入: Rt:存储返回信息的指针
** Drive:驱动器号
** ClusIndex:目录首簇号
** FileName:文件(目录)名
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: GetDiskInfo,GetFDTInfo,SetFDTInfo
**
********************************************************************************************************/
INT8U DelFDT(INT8U Drive,INT32U ClusIndex,char FileName[])
{
INT32U i ;
FDT TempFDT ;
INT8U temp ;
i=0 ;
if(FileName[0]==DEL_FDT)
{
FileName[0]=ESC_FDT ;
}
while(1)
{
temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
if(temp!=RETURN_OK)
{
break ;
}
if(TempFDT.Name[0]==EMPTY_FDT)
{
temp=NOT_FIND_FDT ;
break ;
}
if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
if(FileName[0]==TempFDT.Name[0])
if(FileName[1]==TempFDT.Name[1])
if(FileName[2]==TempFDT.Name[2])
if(FileName[3]==TempFDT.Name[3])
if(FileName[4]==TempFDT.Name[4])
if(FileName[5]==TempFDT.Name[5])
if(FileName[6]==TempFDT.Name[6])
if(FileName[7]==TempFDT.Name[7])
if(FileName[8]==TempFDT.Name[8])
if(FileName[9]==TempFDT.Name[9])
if(FileName[10]==TempFDT.Name[10])
{
TempFDT.Name[0]=DEL_FDT ;
temp=SetFDTInfo(Drive,ClusIndex,i,&TempFDT);
break ;
}
i++;
}
if(FileName[0]==ESC_FDT)
{
FileName[0]=DEL_FDT ;
}
return temp ;
}
/*********************************************************************************************************
** 函数名称: ChangeFDT
** 功能描述: 改变指定目录指定文件(目录)的属性
**
** 输 入: Rt:存储返回信息的指针
** Drive:驱动器号
** ClusIndex:目录首簇号
** FileName:文件(目录)名
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: GetDiskInfo,GetFDTInfo,SetFDTInfo
*********************************************************************************************************/
INT8U ChangeFDT(INT8U Drive,INT32U ClusIndex,FDT *FDTData)
{
INT32U i ;
INT8U temp ;
FDT TempFDT ;
i=0 ;
if(FDTData->Name[0]==DEL_FDT)
{
FDTData->Name[0]=ESC_FDT ;
}
while(1)
{
temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
if(temp!=RETURN_OK)
{
break ;
}
if(TempFDT.Name[0]==EMPTY_FDT)
{
temp=NOT_FIND_FDT ;
break ;
}
if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
if(FDTData->Name[0]==TempFDT.Name[0])
if(FDTData->Name[1]==TempFDT.Name[1])
if(FDTData->Name[2]==TempFDT.Name[2])
if(FDTData->Name[3]==TempFDT.Name[3])
if(FDTData->Name[4]==TempFDT.Name[4])
if(FDTData->Name[5]==TempFDT.Name[5])
if(FDTData->Name[6]==TempFDT.Name[6])
if(FDTData->Name[7]==TempFDT.Name[7])
if(FDTData->Name[8]==TempFDT.Name[8])
if(FDTData->Name[9]==TempFDT.Name[9])
if(FDTData->Name[10]==TempFDT.Name[10])
{
temp=SetFDTInfo(Drive,ClusIndex,i,FDTData);
break ;
}
i++;
}
if(FDTData->Name[0]==ESC_FDT)
{
FDTData->Name[0]=DEL_FDT ;
}
return temp ;
}
/*********************************************************************************************************
** 函数名称: DirIsEmpty
** 功能描述:
**
** 输 入: Drive:驱动器号
** ClusIndex:目录首簇号
** 输 出: DIR_EMPTY:空
** DIR_NOT_EMPTY:不空
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: GetFDTInfo
********************************************************************************************************/
INT8U DirIsEmpty(INT8U Drive,INT32U ClusIndex)
{
INT32U i ;
FDT TempFDT ;
INT8U temp ;
Disk_Info*Disk ;
if(ClusIndex==EMPTY_CLUS)
{
return DIR_NOT_EMPTY ;
}
/* 判断是否是fat32 的根目录 */
Disk=GetDiskInfo(Drive);
if(Disk==NULL)
{
return NOT_FIND_DISK ;
}
if(Disk->FATType==FAT32)
if(ClusIndex==Disk->RootDirTable)
{
return DIR_NOT_EMPTY ;
}
i=2 ;
while(1)
{
temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
if(temp!=RETURN_OK)
{
return temp ;
}
if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
if(TempFDT.Name[0]!=DEL_FDT)
{
break ;
}
i++;
}
if(TempFDT.Name[0]==EMPTY_FDT)
{
return DIR_EMPTY ;
}
else
{
return DIR_NOT_EMPTY ;
}
}
/*********************************************************************************************************
** 函数名称: FDTIsLie
** 功能描述: 在指定目录查看指定文件(目录)是否存在
**
** 输 入: Drive:驱动器号
** ClusIndex:目录首簇号
** FileName:文件(目录)名
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: GetDiskInfo,GetFDTInfo
********************************************************************************************************/
INT8U FDTIsLie(INT8U Drive,INT32U ClusIndex,char FileName[])
{
INT32U i ;
INT8U temp ;
FDT temp1 ;
i=0 ;
if(FileName[0]==DEL_FDT)
{
FileName[0]=ESC_FDT ;
}
while(1)
{
temp=GetFDTInfo(&temp1,Drive,ClusIndex,i);
if(temp==FDT_OVER)
{
temp=NOT_FIND_FDT ;
break ;
}
if(temp!=RETURN_OK)
{
break ;
}
if(temp1.Name[0]==EMPTY_FDT)
{
temp=NOT_FIND_FDT ;
break ;
}
if((temp1.Attr&ATTR_VOLUME_ID)==0)
if(FileName[0]==temp1.Name[0])
if(FileName[1]==temp1.Name[1])
if(FileName[2]==temp1.Name[2])
if(FileName[3]==temp1.Name[3])
if(FileName[4]==temp1.Name[4])
if(FileName[5]==temp1.Name[5])
if(FileName[6]==temp1.Name[6])
if(FileName[7]==temp1.Name[7])
if(FileName[8]==temp1.Name[8])
if(FileName[9]==temp1.Name[9])
if(FileName[10]==temp1.Name[10])
{
temp=FDT_EXISTS ;
}
i++;
}
if(FileName[0]==ESC_FDT)
{
FileName[0]=DEL_FDT ;
}
return temp ;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?