使用者刪除手機裡的資料夾,再次建立相同檔名時出現錯誤:open failed: EBUSY (Device or resource busy)

在App開發的過程,如果有個資料夾是App在使用某些功能時必須要存在的,例如像是音樂下載存放後播放。但如果使用者發現手機新增了檔案就直接連同資料夾都一併刪除(或搬移位置),而App為了確保檔案的存在(例如才可以播放音樂),於是在設計上就會在進到該功能頁面的時候又立刻建立資料夾下載檔案,而此時就會發生沒有辦法建立資料夾的錯誤。

E/Error:: /storage/emulated/0/music/my_music.mp3: open failed: EBUSY (Device or resource busy)


會發生這個錯誤是因為相同名稱的資料夾如果被刪除之後又馬上建立相同名稱的資料夾就會被系統擋下來。
所以解決的方法就是建立不同的名稱的資料夾再改回正確的名稱就好。以下提供一個實作的函式:


/**
* 建立可以快速刪增的資料夾
*
* @param path
*/
public static void createFolder(String path) {

//使用系統時間做為名稱的暫時資料夾名稱
final File fakeDir = new File(Environment.getExternalStorageDirectory(),
       path + System.currentTimeMillis());

//真正想要儲存的資料夾名稱
File realDir = new File(Environment.getExternalStorageDirectory(), path);

   //如果真正的資料夾不存在才建立暫時資料夾
   if (!realDir.exists()) {
      fakeDir.mkdirs();
      fakeDir.renameTo(realDir); //暫時資料夾改名為真正的資料夾名稱
      fakeDir.delete(); //刪除暫時資料夾
   }
}


而在使用上只要傳入路徑名稱就可以了
createFolder("music"); //建立一個名為music的資料夾 
Reference:
http://stackoverflow.com/questions/11539657/open-failed-ebusy-device-or-resource-busy

留言

這個網誌中的熱門文章

ISO 27001 LA 主導稽核員 考照心得

Android如何實作強制App版本更新

如何實作從API抓取資料顯示在列表頁(ListView)上