mkdir 失败:EBUSY (设备或资源繁忙)



我已经编写了代码来像这样在内部 sd 中创建新文件夹......

File MainDirectory = new File("/mnt/sdcard/app/");
    if(!MainDirectory.exists()){
        File DBDirectory = new File("/mnt/sdcard/app/database");
        File ProPicDirectory = new File("/mnt/sdcard/app/profilephoto");
        File ProPicTempDirecctory=new File("/mnt/sdcard/app/profilephoto/temp");
        File ReportPicDirectory = new File("/mnt/sdcard/app/reportphoto");
        File ReportThumbPicDirectory = new File("/mnt/sdcard/app/reportphoto/thumb");

        MainDirectory.mkdirs();
        DBDirectory.mkdir();
        ProPicDirectory.mkdir();
        ProPicTempDirecctory.mkdir();
        ReportPicDirectory.mkdir();
        ReportThumbPicDirectory.mkdir();
    }

即使我通过文件管理器删除文件夹并删除应用程序,此代码在两次上也能完美运行,当我重新安装它时,它工作正常。第三次发生此错误后。

I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/database
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/profilephoto
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/profilephoto/temp
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/reportphoto
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/reportphoto/thumb

如何解决此问题。?

您可以尝试使用 Environment.getExternalStorageDirectory() .

 File MainDirectory = new File(Environment.getExternalStorageDirectory().toString()+ "/app");
    if(!MainDirectory.exists()){
        File DBDirectory = new File(MainDirectory+"/database");
        File ProPicDirectory = new File(MainDirectory+"/profilephoto");
        File ProPicTempDirecctory = new File(ProPicDirectory+"/temp");
        File ReportPicDirectory = new File(MainDirectory+"/reportphoto");
        File ReportThumbPicDirectory = new File(ReportPicDirectory+"/thumb");

        MainDirectory.mkdirs();
        DBDirectory.mkdir();
        ProPicDirectory.mkdir();
        ProPicTempDirecctory.mkdir();
        ReportPicDirectory.mkdir();
        ReportThumbPicDirectory.mkdir();
    }

它对我来说工作正常。

希望有帮助.

请确保您具有写入和读取存储的权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

再次检查。

所以问题是文件或目录被系统或其他进程锁定。

我是如何得出这个结论的?

好吧,在我的应用程序的先前版本中,我在根目录处创建了一个包含数据文件(包括媒体文件)的隐藏目录。然后我决定不把它藏起来。突然间,我的测试设备开始崩溃。我将文件夹改回隐藏,它再次工作。

因此,如果没有进程访问该目录,则可能是Android系统扫描媒体文件并执行Google知道什么。也许一个.nomedia文件可以解决这个问题(我没有尝试),但话又说回来,如果你无法控制资源,你就不走运了。

最新更新