RFs类的GetDir函数出现的问题
发布日期:2021-09-28 09:31:49 浏览次数:2 分类:技术文章

本文共 1017 字,大约阅读时间需要 3 分钟。

 具体来说是:为了获取c:/system/install/logs下的所有文件与目录,调用了GetDir函数。但令人奇怪的是调用这个函数时手机竟然直接重起了,任何错误提示也没有。试了好多次都是如此。

经过调试发现在时,在撤销一个sis的安装时,c:/system/install/logs下会创建2个临时文件,然后这两个文件立即又被系统删除了。而恰好是在这个时候我的程序调用了GetDir函数,所以我怀疑是不是这两个文件在GetDir函数运行的时候被删除了(比如在GetDir执行的前半段这两个文件还存在,并且GetDir函数中已经保存了这两个文件的信息了,但随后这两个文件就被删除了)而导致系统级的错误,使机器直接重起。
我用的手机是nokia6600。我试过其他的目录,程序都能正常工作。并且如果在程序中去掉调用GetDir这一行代码也不会有任何问题,一旦加上了就回重起,所以应该不会是我程序的问题。并且这个问题有一定的随机性:不会每次都出现,但一般5次之内肯定会出现。我也试过改变GetDir的参数,但仍然无用

 

程序的代码其实很简单,编写一个简单的活动对象程序,采用RFs的NotifyChange()函数监控c:/system/install/logs下的文件写事件,在程序得到文件服务器的文件写事件通知之后,使用GetDir()获取这个目录下的所有文件信息。就是这样一个函数导致系统重起。

另外自己也模拟重现这个问题了,使用一个程序对系统内任一的目录进行文件写事件监控,同时编写另外一个程序在这个目录下先进行文件创建、写操作,然后再马上删除这些文件。这样做就是想模拟一下在c:/system/install/logs出现的事件:让第一个程序的GetDir()还没有完成的时候第二个程序就已经把新创建的文件删除了,果然系统又重起了,问题重现了。这我已经做过很多的测试了。可以肯定不是我得程序的问题,因为对其他的目录如果下面的子文件没有在GetDir()时被删除的话都不会出现这个问题,而一旦在GetDir()时把文件删除了(注意:既不在GetDir()之前,也不在之后),就极有可能出现这个机器直接重起的问题。
另外使用RDir类的同步Read()也会这样,但我还没有试过异步的。我估计CDirScan也会如此,因为其本质上就是使用RFs的GetDir()方法。
不知大家在获取一个目录下的所有子文件、子目录上还有什么好的建议。

转载地址:https://blog.csdn.net/gooer/article/details/2823421 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Symbian OS应用开发--文件和目录
下一篇:要从文件中读入文本

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月13日 06时00分09秒