打印
[ZLG-ARM]

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

[复制链接]
1831|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jstu023123|  楼主 | 2008-7-14 13:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  FAT32文件系统中,建立文件并写进数据后,想删除文件中的某段数据(可能大于一个簇的数据),是不是把后面所有数据都往前移动定长,然后修改目录项就可以了?这种方法感觉不大对,太慢了,要是要删第一个数据,那整个文件都要动了。。。到底该怎么处理啊,还望大侠指教,谢谢~~
  还有要是插入数据该怎么处理呢?

相关帖子

沙发
armecos| | 2008-7-14 14:16 | 只看该作者

看FAT源码就知道了,

建议先看看ROMFS、RAMFS的源码,体会一下FS的本质,毕竟这两个介质的FS最简单易懂,然后你再看FAT文件系统源码,比如:ecos下就有源码,遵循UNIX I/O标准。

www.armecos.com免费下载里有试用程序,可以在smartarm2200上操作SD卡,支持FAT12/16/32。

更多内容,详见:
《培训系列“丛书”》
www.armecos.com
-----------------------------------
More details, see:
《"Series Books" of Training》
www.armecos.com

使用特权

评论回复
板凳
桂电飞天鼠| | 2008-7-14 14:55 | 只看该作者

应该只需改变链簇指向

不过还没具体实践过

使用特权

评论回复
地板
jstu023123|  楼主 | 2008-7-15 09:17 | 只看该作者

测试了下。。。

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

使用特权

评论回复
5
foyyof| | 2008-7-15 12:43 | 只看该作者

应该是这样的

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

粉丝