问题描述
但是当我尝试解密它时,我收到此消息错误:未处理的异常:filesystemexception:无法打开文件,路径 = '/storage/emulated/0/MyEncFolder/File: '/data/user/0/com.example .encryptionfiles/cache/file_picker/Inter-Milan.jpg.aes''(操作系统错误:没有那个文件或目录,errno = 2)
这是我的代码:
import 'dart:io';
import 'dart:typed_data';
import 'package:file_picker/file_picker.dart';
import 'package:Flutter/material.dart';
import 'package:encrypt/encrypt.dart' as encrypt;
import 'package:Fluttertoast/Fluttertoast.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
File _file;
class Welcome extends StatefulWidget {
static String id = "Welcome";
@override
_WelcomeState createState() => _WelcomeState();
}
class _WelcomeState extends State<Welcome> {
bool _isGranted = true;
Future<Directory> get getAppDir async {
final appDocDir = await getApplicationDocumentsDirectory();
return appDocDir;
}
Future<Directory> get getExternalVisibleDir async {
if (await Directory('/storage/emulated/0/MyEncFolder').exists()) {
final externalDir = Directory('/storage/emulated/0/MyEncFolder');
return externalDir;
} else {
await Directory('/storage/emulated/0/MyEncFolder')
.create(recursive: true);
final externalDir = Directory('/storage/emulated/0/MyEncFolder');
return externalDir;
}
}
getStoragePermission() async {
if (!await Permission.storage.isGranted) {
PermissionStatus result = await Permission.storage.request();
if (result.isGranted) {
setState(() {
_isGranted = true;
});
} else {
setState(() {
_isGranted = false;
});
}
}
}
@override
Widget build(BuildContext context) {
getStoragePermission();
return Scaffold(
body: Container(
alignment: Alignment.center,child: Column(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [
ElevatedButton(
onpressed: () async {
if (_isGranted) {
Directory d = await getExternalVisibleDir;
FilePickerResult result = await FilePicker.platform.pickFiles();
_file = File(result.files.single.path);
_downloadAndCreate(d,_file.path.split('/').last,_file.path);
} else {
print('no permission granted');
getStoragePermission();
}
},child: Text(
'اختار ملف للتشفير ',style: TextStyle(fontSize: 20,fontWeight: FontWeight.bold),),SizedBox(
height: 20,ElevatedButton(
onpressed: () async {
if (_isGranted) {
Directory d = await getExternalVisibleDir;
FilePickerResult result = await FilePicker.platform.pickFiles();
_file = File(result.files.single.path);
_getnormalFile(d,_file);
} else {
print('no permission granted');
getStoragePermission();
}
},child: Text(
'فك تشفير الملف',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 20),],));
}
}
void _downloadAndCreate(Directory dir,fileName,filePath) async {
print('data downloading ...');
Fluttertoast.showToast(msg: 'data downloading ...');
var encResult = _encryptData(_file.path.codeUnits);
String p = await _writeData(encResult,dir.path + '/$fileName.aes');
print('file encrypted Successfully $p');
Fluttertoast.showToast(msg: 'تم تشفير الملف بنجاح$p');
}
_getnormalFile(Directory d,File fileNameNew) async {
Uint8List encData = await _readData(fileNameNew.readAsBytesSync());
var plainData = await _decryptData(encData);
String p = await _writeData(plainData,d.path + '/$fileNameNew');
print('file decrypted Successfully $p');
Fluttertoast.showToast(msg: 'تم فك تشفير الملف بنجاح $p');
}
Future<Uint8List> _readData(fileNameWithPath) async {
print('Reading data ...');
Fluttertoast.showToast(msg: 'قراءه البيانات ...');
return await fileNameWithPath;
}
_decryptData(encData) {
print('جاري فك التشفير ...');
Fluttertoast.showToast(msg: 'File decryption is progress...');
encrypt.Encrypted enc = new encrypt.Encrypted(encData);
return MyEncrypt.myEncrypter.decryptBytes(enc,iv: MyEncrypt.myIv);
}
_encryptData(List<int> plainString) {
print('Encrypting File...');
Fluttertoast.showToast(msg: 'جاري تشفير الملف ...');
final encrypted =
MyEncrypt.myEncrypter.encryptBytes(plainString,iv: MyEncrypt.myIv);
print("test : ${encrypted.bytes}");
return encrypted.bytes;
}
Future<String> _writeData(dataToWrite,fileNameWithPath) async {
print('كتابه البيانات ...');
Fluttertoast.showToast(msg: 'كتابه البيانات ...');
_file = File(fileNameWithPath);
await _file.writeAsBytes(dataToWrite);
return _file.absolute.toString();
}
class MyEncrypt {
static final myKey = encrypt.Key.fromUtf8('OqbahahmeddxFlutterapplication29');
static final myIv = encrypt.IV.fromUtf8('hfyrujfisoldkide');
static final myEncrypter =
encrypt.Encrypter(encrypt.AES(myKey,padding: null));
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)