[ZLG-ARM] SD卡FAT32,想要删除文件中的一段数据,该怎么处理啊

[复制链接]
2662|4
 楼主| jstu023123 发表于 2008-7-14 13:57 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;FAT32文件系统中,建立文件并写进数据后,想删除文件中的某段数据(可能大于一个簇的数据),是不是把后面所有数据都往前移动定长,然后修改目录项就可以了?这种方法感觉不大对,太慢了,要是要删第一个数据,那整个文件都要动了。。。到底该怎么处理啊,还望大侠指教,谢谢~~<br />&nbsp;&nbsp;还有要是插入数据该怎么处理呢?
armecos 发表于 2008-7-14 14:16 | 显示全部楼层

看FAT源码就知道了,

建议先看看ROMFS、RAMFS的源码,体会一下FS的本质,毕竟这两个介质的FS最简单易懂,然后你再看FAT文件系统源码,比如:ecos下就有源码,遵循UNIX&nbsp;I/O标准。<br /><br />www.armecos.com免费下载里有试用程序,可以在smartarm2200上操作SD卡,支持FAT12/16/32。<br /><br /><b>更多内容,详见:</b><br /><b>《培训系列“丛书”》</b><br /><b>www.armecos.com</b><br />-----------------------------------<br /><b>More&nbsp;details,&nbsp;see:</b><br /><b>《&quot;Series&nbsp;Books&quot;&nbsp;of&nbsp;Training》</b><br /><b>www.armecos.com</b>
桂电飞天鼠 发表于 2008-7-14 14:55 | 显示全部楼层

应该只需改变链簇指向

不过还没具体实践过
 楼主| jstu023123 发表于 2008-7-15 09:17 | 显示全部楼层

测试了下。。。

&nbsp;&nbsp;将二百多K的文件拷进SD卡中,读出FAT表首页和目录FDT,显示簇链0x03~0x73,然后通过电脑修改文件,把任意段数据删除了,在通过单片机读FAT和FDT表信息,簇链为0x03~0x49.<br />&nbsp;&nbsp;读取某连续4个扇区数据(跨簇),然后通过电脑删除文件开头若干数据,在通过单片机读取该连续4个扇区数据,发现存储的数据位置都前移了一定长度<br />&nbsp;&nbsp;通过以上测试,没发现是通过改变簇链来实现的,感觉删除数据时是把数据前移,去掉尾巴,而插入数据时则是数据后移。<br />&nbsp;&nbsp;望大侠指点一二。。。谢谢
foyyof 发表于 2008-7-15 12:43 | 显示全部楼层

应该是这样的

你想想啊,如果一个文件一个簇里,被删了一部分内容,如果簇不重新整理,移动,那文件根本没法完整表达。毕竟文件是连续整个簇来实现,只有最后一个簇有节余。所以。。。。移动是必须的,只是看怎么移更划算。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部