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 + -
显示快捷键?