繁体   English   中英

例外:文件必须位于 rootDir 下

[英]Exception: Files must reside under the rootDir

在获取 pdf 个文件的列表后,我想将我的文件转换为 .zip 文件,但显示异常:文件必须位于 rootDir 下

ListTile(
                    title: Text(files[index].path),
                    leading: Icon(Icons.folder_zip_outlined),
                    //   trailing: Icon(Icons.play_arrow, color: Colors.redAccent,),
                    onTap: (){
                      final sourceDir = Directory("source_dir");
                      final files = [
                        File(sourceDir.path + "file1"),
                        File(sourceDir.path + "file2")
                      ];
                      try {
                        final zipFile = File("storage/emulated/0/zip/${files[index].path.split('/').last}.zip");

                        ZipFile.createFromFiles(
                            sourceDir: sourceDir, files: files, zipFile: zipFile);
                      } catch (e) {
                        print(e);
                      }
                      // you can add Play/push code over here
                    },
                  )

我遇到了同样的问题,这是我的解决方案:

  • 您必须将所需文件复制到应用程序的根目录
  • 然后你必须将这个新的文件列表传递给 zip function

我创建了一个文件 util class 帮助我将文件移动到根目录:

 import 'dart:io'; import 'package:path/path.dart' as p; class FileUtil { static Future<List<File>> copyFilesToRootDirectory( List<File> files, String newPath) async { List<File> newFilesList = []; files.forEach((file) async { newFilesList.add(await copyFileToRootDirectory(file, newPath)); }); return newFilesList; } static Future<File> copyFileToRootDirectory(File file, String newPath) async { String finalPath = "$newPath/${getFileNameAndType(file)}"; if (file.path == finalPath) { //file already in this path return file; } return await file.copy(finalPath); } static String getFileNameAndType(File file) { return file.path.split("/").last; } }

在 Looger Util class 中,我创建了这个 function:

 static Future<File?> zipFiles() async { final appDir = await getApplicationDocumentsDirectory(); final String dbPath = p.join(appDir.path, 'kidlingTeacher.db').toString(); final List<File> files = [File(dbPath), await FLog.exportLogs()]; final List<File> filesInRootDir = await FileUtil.copyFilesToRootDirectory(files, appDir.path); final zipFile = File(p.join(appDir.path.toString(), "DIAGNOSTICS-${await getDeviceUUID()} - ${DateTime.now().toUtc().toString()}.zip")); try { await ZipFile.createFromFiles( sourceDir: appDir, files: filesInRootDir, zipFile: zipFile); return zipFile; } catch (e, s) { LoggerUtil.logError( text: "zip file process failed", className: "logger util", methodName: "zipFiles", exception: e as Exception, stackTrace: s); } return null; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM