在我的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 ++代码访问文件时,它的内容是否有效?