0

私のプログラムは、SDカードのフォルダーにある2つのファイル(.oggサウンドファイル)を、getCacheDir()を介して返されるアプリケーションのキャッシュディレクトリにコピーする必要があります。

次のコードを使用してファイルをコピーします

File cache=this.getCacheDir();
cache.mkdirs();
fout=new FileOutputStream(cache.getAbsolutePath()+"/file1.ogg");
fin=new FileInputStream(Environment.getExternalStorageDirector+"/imported/file1.ogg");

byte[] buf = new byte[128];
int len;
while ((len = fin.read(buf,0,128))>-1){
    fout.write(buf, 0, len);
}

fout.close();
fin.close();    

コードはエラーなしでコンパイルおよび実行され、両方のファイルがコピーされ、元のファイルと同じサイズになりますが、プログラムがそれらの.oggファイルを再生しようとすると、コピーされたファイルをPCで再生しようとするとIO例外が発生します。エラーが発生します。

ただし、SDカードのあるフォルダから別のフォルダにコピーすると正常に再生されます。つまり、外部メディアから外部メディアへのコピーは問題ありませんが、外部メディアから内部メディアへのコピーは破損の原因になります。

編集

これが私の実験と観察から私が見つけたものです:

A)元のファイルをプログラムで内部ストレージにコピーする->ファイルの再生に失敗する

B)元のファイルを内部ストレージに直接コピーする(rootアクセス権があります)->正常に再生されます

C)プログラムでコピーされたファイルをSDカード内の任意の場所に直接コピーして戻す->再び正常に再生されます(驚くべきことです!)

注:-ここで直接コピーするということは、AndroidOSからのコピーアンドペーストを使用することを意味します

私の感覚では、コピーしたファイルはコピーした直後には機能しませんが、SDカードに移動すると再び機能し始めます。

FTWマン!

4

1 に答える 1

0

答えは、内部メモリではなくキャッシュを使用している可能性があります。キャッシュの保証はありません。

于 2012-07-08T19:41:19.287 に答える