Проблема с копированием ресурсов Android во внешние файлы. - PullRequest
0 голосов
/ 17 ноября 2011

В методе onCreate моей Деятельности я копирую большой (20 - 30 МБ) файл 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 ++ получит доступ к файлу, его содержимое будет действительным?

...