[英]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
},
)
我遇到了同样的问题,这是我的解决方案:
我创建了一个文件 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.