Android资产复制到外部文件dir同步问题

时间:2011-11-16 22:12:32

标签: android fopen fread fileoutputstream

在我的Activity的onCreate方法中,我使用以下代码将一个大的(20 - 30mb)wad / archive文件从资产管理器复制到外部文件目录:

private boolean UnpackContent( String name )
{
    // Copy the content file from the asset manager to external storage.
    try
    {
        InputStream in = getAssets().open( name + ".mp3" );
        File outFile = new File( getExternalFilesDir( null ), name + ".hha" );
        OutputStream out = new FileOutputStream( outFile );
        Log.i( "Horque", "Copying asset: " + name + ".mp3 to: " + outFile.getAbsolutePath() + "..." );
        byte[] buf = new byte[256 << 10];
        int len;
        while ((len = in.read(buf)) > 0)
        {
            out.write(buf, 0, len);
            //Log.i( "Horque", "   " + len + "bytes written" );
        }
        out.flush();
        out.close();
        in.close();

        Log.i( "Horque", "   Done." );
        return true;
    }
    catch( Exception e )
    {
        Log.e( "Horque", "  Failed, exception occurred." );
        return false;
    }
}

如果目标文件不存在或者比应用程序.apk文件旧,我只会这样做。我们的应用程序主要是用C ++编写的,因此我们所有的文件访问都是使用标准的C fileio(fopen,fread等)完成的。我遇到的问题是,当我运行完全优化的发布版本时,似乎上述副本在我们的C ++代码访问存档时没有刷新或真正完成,导致空(黑色rgb或透明rgba)纹理。如果我运行调试版本,或运行文件已存在的最终版本,一切都可以。有没有办法可以刷新文件系统,以确保当我的C ++代码访问文件时,它的内容是否有效?

0 个答案:

没有答案