2

Android でアプリケーションを作成しました。このアプリケーションはアクティビティをファイルに記録します。ファイルをエクスポートするオプションがあるため、ファイルを .zip に保存します。.zip に追加するファイルが複数ある場合、次のエラーが発生します。

(汎用フラグ - ローカル: 808 hex 中央: 8 hex)。ローカルと中央の GPFlags 値が一致しません。

これは、Android 2.3 で winzip または 7zip を使用している場合にのみ発生します。Windows エクスプローラーまたは winrar を使用してこの問題を回避できますが、回避するのではなく、問題を解決したいと考えています。

Android 2.2 デバイスで同じアプリケーションを使用しても発生しません。

私は周りを検索し、暗号化に関するいくつかのコメントを見つけましたが、何も暗号化していません. 特定のライブラリなどの更新に関するコメントもいくつか見つかりましたが、Android sdk 11 と Java jdk 1.6.0_25 を使用しています。

同じ結果で2つの異なるコードを試しました

int count = log_.getLogFileList(files_);
if (count > 0)
{                       
String inFileName;
File inFile;
String phoneNumLast =OsmoService.getAccountString(OsmoService.context).substring(6);
long date = files_.get(count - 1).lastModified();
SimpleDateFormat formatter = new SimpleDateFormat("MMddHHmmss");                     
String outdt = new String(formatter.format(new Date(date)));
String outFileName = new String("Dir Name" + "//" + "PREFIX" + "_" + outdt + ZIP_SUFFIX);

File outFile = new File(outFileName);                   
ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( outFile ) );
BufferedOutputStream outBS = new BufferedOutputStream(zos, 8192 );

for (int idx = (count - 1); (idx >= 0) && !isCancelled(); idx--)
{
inFile = files_.get(idx);  
BufferedReader inBR = new BufferedReader(new FileReader(inFile), 8192);                     
inFileName = inFile.getName();
Log.v(LOG_TAG, "MailLogFiles - Zipping " + inFileName);

zos.putNextEntry( new ZipEntry(inFileName));
int zix;
while ( (zix = inBR.read()) != -1 )
outBS.write(zix);
outBS.flush();       
zos.closeEntry();    
inBR.close();
}
outBS.close();

この

public static void compressFileList( String[] inFiles, String outFile )
throws IOException
{
ZipOutputStream zos = new ZipOutputStream(
new BufferedOutputStream( new FileOutputStream( outFile ) ));
byte data[] = new byte[2048];

  for (int i = 0; i < inFiles.length; i++)
  {
     BufferedInputStream in = new BufferedInputStream( new FileInputStream( inFiles[i] ) );
     zos.putNextEntry( new ZipEntry(inFiles[i]) );
     int count;
     while( ( count = in.read( data, 0, data.length ) ) != -1 )
        zos.write(data, 0, count);
     zos.closeEntry();
     in.close();
  }
  zos.close();
}
4

1 に答える 1

2

これは、Ice Cream Sandwich で修正される報告されたバグが原因だと思います: http://code.google.com/p/android/issues/detail?id=20214

于 2012-01-26T18:14:20.390 に答える