В методе 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 ++ получит доступ к файлу, его содержимое будет действительным?