Bonjour à Tou.s.tes
Problèmes d’accès fichiers sur disque local.
Afin d’initialiser des tables sqlflite (via Floor) j’utilise des données en format texte sur fichiers en local.
Dans un environnment IOS dans l’application Flutter tout se passe correctement.
Les chemins d’accés sont :
static String filesTablesDirectory = ‹ /Users/ric/sqlfdc/ ›;
In fine la construction du label du fichier donne par exemple /Users/ric/sqlfdc/listetables.txt
La lecture et création des tables se déroulent correctement.
Dans l’environnement Windows, toujours avec Flutter l’accès aux fichiers sur disque génère une erreur.
Les chemins d’accés sont :
static String filesTablesDirectory = ‹ C:\sqlfdc\ ›;
In fine la construction du label du fichier donne par exemple C:\sqlfdc\listables.txt
et l’erreur:
E/flutter (19022): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: FileSystemException: Cannot open file, path = ‹ C:\sqlfdc\listetables.txt › (OS Error: No such file or directory, errno = 2)
E/flutter (19022): #0 _File.open. (dart:io/file_impl.dart:356:9)
E/flutter (19022): #1 _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter (19022): #2 _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (19022):
E/flutter (19022): #3 readFile
E/flutter (19022):
E/flutter (19022): #4 main
E/flutter (19022):
E/flutter (19022):
Le test en simplifiant l’application:
import ‹ package:flutter/material.dart ›;
import ‹ dart:io ›;
Future readFile() async {
final String fileName = « C:\sqlfdc\listetables.txt »;
List lines;
File data = new File(fileName);
lines = await data.readAsLines();
for (var line in lines) {
print(line);
}
}
void main() async {
await readFile();
runApp(MyApp());
}
…
La même fonction de lecture exécutée dans un programme dart fonctionne correctement.
// readstring.dart
import ‹ dart:io ›;
void main() async {
final String fileName = « C:\sqlfdc\listetables.txt »;
List lines;
File data = new File(fileName);
lines = await data.readAsLines();
for (var line in lines) {
print(line);
}
}
En debug de Flutter la variable
data: _File (File: ‹ C:\sqlfdc\listetables.txt ›)
… avec
data._absolutePath: « /C:\sqlfdc\listetables.txt »
data.isAbsolute: false
Peut-être que le problème vient que le chemin n’est pas considéré comme absolu et que Flutter ajoute / géré différemment par Windows et IOS??
car si dans le programme dart readstring.dart le chemin est remplacé par :
« /C:\sqlfdc\listetables.txt »
Alors erreur d’exécution :
FileSystemException: Cannot open file, path = ‹ /C:\sqlfdc\listetables.txt › (OS Error: La syntaxe du nom de
fichier, de répertoire ou de volume est incorrecte.
, errno = 123)
#0 _File.open. (dart:io/file_impl.dart:356:9)
#1 main (package:flutter_app/readstring.dart:8:11)
Avez-vous expérimenté (voire résolu ) ce problème en travaillant sur ces 2 environnements différents?
Cordialement à Tous et à Maxime
RI