这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » zlg,fs 我发现zlg/fs文件系统有错误!

共2条 1/1 1 跳转至

zlg,fs 我发现zlg/fs文件系统有错误!

院士
2006-09-17 18:14:16     打赏
zlg,fs 我发现zlg/fs文件系统有错误!



关键词: 发现     文件     系统     有错误    

院士
2006-12-22 22:43:00     打赏
2楼
问 1. 删除文件函数RemoveFile()中:                
(1)if (FindOpenFile(Drive, ClusterIndex, DirName) < MAX_OPEN_FILES)
{删除文件}
应该改为:
(2)if (FindOpenFile(Drive, ClusterIndex, DirName) >= MAX_OPEN_FILES)
{删除文件}
因为FindOpenFile()的返回值为打开的文件的句柄,如果(1)对,则说明文件已经打开,此时是不能删除文件的,所以我觉得应该改为(2).
2. 改变当前目录函数ChangeDir(Path)中:
有调用函数GetDirClusterIndex(pPath):               
if (FindFDTInformation(&Rt, Drive, ClusIndex, DirName) != RETURN_OK)
{uiErr = BAD_CLUSTER;
break;
}
DirName是Path中的目录名,if语句中既然成立,证明能找到Path中的目录名,Path中的目录名不是现在要改的吗?怎么会存在呢?

1: 我一直没有看懂我很想看懂这一部分,可没有资料,没办法看懂。
看来你有什么资料,还能看出他的问题。
你是怎么看懂的,望能交流 2: 。1,如果磁盘里没有那个文件,怎么删除?流程可能是 : 打开文件---〉(如果文件存才)  ---〉 删除文件,这里也有个问题:文件句柄如果用完,那个文件无法打开,也就不能删除,不清楚zlg fs这点有没有考虑
2,path = dirname + filename(也可能是目录),if语句的目的好像是在判断path指定的目录是否存在,如果不存在,返回。建议楼主把代码多看几遍,这点仅从这点代码无法判断fs 是否有错。测试一下,应该就知道了。。 3: re:lyy1981我觉得你说的不对:
1. 对于删除文件函数,有判断文件是否存在,那是对的,我说的错误是在后面判断文件是否打开,只有文件关闭才能删除,它这里是用FindOpenFile()来判断的,这个函数的返回值有二钟情况:打开的文件的句柄;没有找到打开的文件。应该为后者才能被删除啊!而书中的判断刚好反了!
2. 你说的是没错,可是不存在返回的话,这个返回值就是改变当前目录函数ChangeDir(Path)的返回值,因为在这个函数中,只有返回值不等于 BAD_CLUSTER才能改变目录啊!也就是改变逻辑盘信息中的当前目录首簇号这一项,这是改变目录的实质。
   你觉得呢? 4: re:lyy1981你有看过或调试过这个文件系统吗?
我这是在调试中才发现的,不调试我哪看的出来啊? 5: re程序在《ARM嵌入式系统软件开发实例》这本书中! 6: 我没调过 7: re我改了以上2个函数后,调试都通过了!

还有,周立功文件系统读写文件很慢很慢,我写一个35K的文件都花了40S,这样肯定不行。
我把读写文件函数自己写了一下,结果很快,不到1S就好了!
看来这个文件系统还有很多问题哦! 8: 文件系统全部是线性查找的我也修改了查询算法

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]