你好,振南,听了你的解说,我清楚了,昨天仔细看了一下你说的这五点,前三项我是做了的,就是第四、五项,我没有找见关于FSINFO的相关代码,还不会做
1、要把原来的首簇设置为0x0000,即空簇
2、在文件的文件项中首簇更新为当前的首簇
3、更改文件项中的文件大小
4、更改FSINFO中的空闲簇数
5、更改FSINFO中的空簇参考值
这是我的程序,按找删除文件的函数改写的,没有涉及到FSINFO啊?
void DeletData(struct FileInfoStruct *pfi)
{long Cluster1,Cluster2,Cluster3,Cluster_New_Start;
struct direntry *prec;
FAT32_ReadSector(pfi->Rec_Sec,FAT32_Buffer);//获取头四个簇,然后将其清空
prec=(struct direntry *)(FAT32_Buffer+pfi->nRec);
Cluster1=FAT32_GetNextCluster(pfi->FileStartCluster);
Cluster2=FAT32_GetNextCluster(Cluster1);
Cluster3=FAT32_GetNextCluster(Cluster2);
Cluster_New_Start=FAT32_GetNextCluster(Cluster3);//找寻到新的首簇 Cluster_New_Start
FAT32_Modify_FAT(pfi->FileStartCluster,0x00000000);
FAT32_Modify_FAT(Cluster1,0x00000000);
FAT32_Modify_FAT(Cluster2,0x00000000);
FAT32_Modify_FAT(Cluster3,0x00000000);
pfi->FileStartCluster=Cluster_New_Start; //更改文件首簇到Cluster_New_Start
pfi->FileSize=pfi->FileCurOffset-16384;//更改改文件大小
pfi->FileCurSector=SOC(pfi->FileCurCluster);
pfi->FileCurOffset=pfi->FileCurOffset-16384;
FAT32_ReadSector(pfi->Rec_Sec,FAT32_Buffer);//修改FAT表首簇号
(prec->deHighClust)[0]=(Cluster_New_Start&0x00ff0000)>>16;
(prec->deHighClust)[1]=(Cluster_New_Start&0xff000000)>>24;
(prec->deLowCluster)[0]=(Cluster_New_Start&0x000000ff);
(prec->deLowCluster)[1]=(Cluster_New_Start&0x0000ff00)>>8;
FAT32_WriteSector(pfi->Rec_Sec,FAT32_Buffer);
FAT32_ReadSector(pfi->Rec_Sec,FAT32_Buffer);//修改文件大小
(((struct direntry *)(FAT32_Buffer+pfi->nRec))->deFileSize)[0]=((pfi->FileCurOffset)&0x000000ff);
(((struct direntry *)(FAT32_Buffer+pfi->nRec))->deFileSize)[1]=((pfi->FileCurOffset)&0x0000ff00)>>8;
(((struct direntry *)(FAT32_Buffer+pfi->nRec))->deFileSize)[2]=((pfi->FileCurOffset)&0x00ff0000)>>16;
(((struct direntry *)(FAT32_Buffer+pfi->nRec))->deFileSize)[3]=((pfi->FileCurOffset)&0xff000000)>>24;
FAT32_WriteSector(pfi->Rec_Sec,FAT32_Buffer);
}
|