android 删除文件错误(open failed EBUSY)

某次客户提出的问题,发现设备内目录删除总是失败报错。遂百度一波,得到临时解决方式,现记录下

在安卓中,某个文件或者文件夹,在名称不变的情况下反复创建删除,会有一个概率出现这个错误

解决方法:

  1. 查看是否有进程占用了此文件
  2. 重启大法
  3. 删除时:删除文件A前,重命名(使用renameto,__renameFile,reanme等,A to B),然后再删除
  4. 新建时:在其他地方新建文件B,然后重命名为A;

这次的用重启大法解决了

引起的原因:

CSDN上的解释,还不太清楚是咋回事,也没有验证:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
个人猜测因引起的原因,肯定不准确,看看就好。欢迎指正:

EBUSY是errno中的定义为16的错误码,表示被占用而无法进行操作。

然而在POSIX的文档里,对于创建或者删除文件/文件夹返回的错误,并不包括EBUSY,EBUSY是他们预期之外错误码。网上搜的一种猜测,EBUSY是Fat32格式磁盘的bug。
 

举例:建立文件A,使用文件A,删除文件A,再建立文件A,就会报错。

原因可能是,删除文件A后,A的状态应该是《不存在,未使用》,但此时磁盘对于A错误的记录为,《不存在 ,使用中》,这就导致下次新建的时候,牵扯到正在使用中的文件,导致建立失败。
Licensed under CC BY-NC-SA 4.0