Xamarin формы - при попытке использовать ZipArchive и архивировать 2 больших файла мое приложение упало - PullRequest
0 голосов
/ 14 февраля 2020
public void Create(List<object> targets, string directoryName, string zipPath)
{
    // Create empty zip
    Directory.CreateDirectory(directoryName);
    ZipFile.CreateFromDirectory(directoryName, zipPath);
    Directory.Delete(directoryName);

    // Add targets to the zip
    using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Open))
    {
        using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
        {
            foreach (var target in targets)
                archive.CreateEntryFromFile(target.Path, GetFile(target)); 

         // GetFile() is mine, everything is correct there, a string is returned.

        }
    }
}

Я всегда архивирую ровно 2 файла. Когда они большие, мое приложение вылетает без ошибок. Насколько я могу сказать, обычно на второй итерации l oop все останавливается. Редко это происходит в первый раз.

Если файлы имеют средний размер, иногда отображается «Приложение не отвечает» кнопками «ОК» и «Ожидание», а иногда и происходит сбой, если они очень велики, просто происходит сбой. Если файлы меньше по размеру, все работает как положено. Мне нужно заархивировать 2 файла, каждый размером около 250 МБ.

Я попытался использовать метод как асинхронный, и он снова вылетает.

Есть ли что-то, что я могу сделать и почему происходит сбой без исключения или ошибки?

РЕДАКТИРОВАТЬ: у меня есть много вещей в моем журнале устройства, но вот часть этого, я думаю, показывается только перед cra sh. Я не знаю

Error (514) / InputDispatcher: channel '922f0b4 com.tblenovo.launcher/com.android.launcher3.SearchLauncher (server)' ~ Channel is unrecoverably broken and will be disposed!
Error (514) / InputDispatcher: channel 'd7c6d15 com.myapplication.myapp/crc641f49b5f001a15ef5.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
Error (248) / DumpTunnel: finding regDump() failed
Error (240) / android.hardware.wifi@1.0-service: Invalid radio stats in link layer stats
Error (28375) / Tinker.ReflectApp: replaceApplicationLike delegateClass:class com.tencent.bugly.beta.tinker.TinkerApplicationLike
Error (28375) / CrashHandler: getInstance exception: java.lang.UnsatisfiedLinkError: dlopen failed: couldn't map "/data/data/com.tblenovo.launcher/app_tbs/core_share/libtbs_crash_handler.so" segment 2: Permission denied
Error (28375) / LOG_FILE: file.getAbsolutePath=/storage/emulated/0/Android/data/com.tblenovo.launcher/files/tbslog/tbslog.txt append=true
Error (28375) / LOG_FILE: java.lang.NullPointerException: Attempt to get length of null array
Error (28375) / LOG_FILE:   at java.io.FilterOutputStream.write(FilterOutputStream.java:97)
Error (28375) / LOG_FILE:   at com.tencent.smtt.utils.LogFileUtils.writeDataToStorage(Unknown Source:88)
Error (28375) / LOG_FILE:   at com.tencent.smtt.utils.TbsLogClient.writeLogToDisk(Unknown Source:16)
Error (28375) / LOG_FILE:   at com.tencent.smtt.utils.TbsLogClient.writeLog(Unknown Source:90)
Error (28375) / LOG_FILE:   at com.tencent.smtt.utils.TbsLog.i(Unknown Source:38)
Error (28375) / LOG_FILE:   at com.tencent.smtt.sdk.QbSdk.a(Unknown Source:15)
Error (28375) / LOG_FILE:   at com.tencent.smtt.sdk.QbSdk.a(Unknown Source:27)
Error (28375) / LOG_FILE:   at com.tencent.smtt.sdk.l.a(Unknown Source:80)
Error (28375) / LOG_FILE:   at com.tencent.smtt.sdk.g.run(Unknown Source:30)
Error (28375) / OperatorCustomizationFactoryLoader: can not find operatorFactoryInfo by slot id -1 from 
Error (28375) / OperatorCustomizationFactoryLoader: 0: OperatorFactoryInfo(OP03_null_SEGDEFAULT:OP03Wallpaper.apk:com.mediatek.op03.wallpaper.Op03WallpaperCustomizationFactory:com.mediatek.op03.wallpaper)
Error (28375) / LenovoSetingUtils: failed : invalid format or not find file
Error (28375) / ReflectUtils: com.lenovo.reaper.AppInfoManager
Error (28375) / ReflectUtils: android.provider.MultiSIMUtils
Error (248) / DumpTunnel: finding regDump() failed

И немного дальше

Error (28375) / GlideExecutor: java.lang.AbstractMethodError: abstract method "void com.bumptech.glide.load.Key.updateDiskCacheKey(java.security.MessageDigest)"
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.resource.gif.GifDrawableTransformation.updateDiskCacheKey(GifDrawableTransformation.java:67)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.ResourceCacheKey.updateDiskCacheKey(ResourceCacheKey.java:83)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.cache.SafeKeyGenerator.calculateHexStringDigest(SafeKeyGenerator.java:52)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.cache.SafeKeyGenerator.getSafeKey(SafeKeyGenerator.java:41)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.cache.DiskLruCacheWrapper.get(DiskLruCacheWrapper.java:88)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:86)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:269)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233)
Error (28375) / GlideExecutor:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
Error (28375) / GlideExecutor:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
Error (28375) / GlideExecutor:  at java.lang.Thread.run(Thread.java:764)
Error (28375) / GlideExecutor:  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446)
Error (28375) / GlideExecutor: Request threw uncaught throwable
...