2011-07-04 6 views
1

Android上でフォルダのサイズを取得しようとしています。問題は次のとおりです。ディレクトリサイズを取得する方法が異なる結果を返す

  1. 関数が何か別のものを返すたびに。
  2. すべてのファイルをスキャンするわけではありません。

誰かが私にその理由を教えてもらえますか?

private long dirSize(File dir) { 
    long result = 0; 
    File[] fileList = dir.listFiles(); 

    for(int i = 0; i < fileList.length; i++) { 
     // Recursive call if it's a directory 
     if(fileList[i].isDirectory()) { 
      result += dirSize(fileList [i]); 
     } else { 
      // Sum the file size in bytes 
      result += fileList[i].length(); 
     } 
    } 
    return result/1024/1024; // return the file size 
} 

私はこの機能を別のスレッドから持っています。このコードを改善するにはどうすればよいですか?

+0

良いコード!ありがとう!投票してください! – XXX

答えて

6

最後に除算を取り除きます。各サブフォルダは最も近いMBに丸められ、現在のフォルダのサイズにバイト単位で追加されます。呼び出し側でバイトを返し、変換を処理します。

+0

同じコードを実行すると、誤った方法で計算されているにもかかわらず、同じ値が返されるはずです... @Omarは操作中にAndroid内で何か変更があるかどうかを確認する必要があります – woliveirajr

+0

@Omar:@developmentalが問題を指摘していることを確認してくださいこのメソッドを再帰的に呼び出すために発生します。それが一度呼び出された場合、それは働いていた可能性があります... – woliveirajr

+0

それは確かに問題でした。ソリューションに感謝します。 – Omar

関連する問題