Chemin accès fichiers sur disque local IOS /Windows

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

Bonjour,

Je n’ai pas la réponse sur ton soucis sous Windows (je me pose la question de droits d’accès au dossier peut-être?).
Par contre, je travaille régulièrement avec différents environnement (Mac et windows). Pour cela, j’inclus mes fichiers dans Flutter directement en gérant les Assets dans le pubspec.yaml. Ce qui me permet de faire un dossier avec les fichiers dans le projet. Maxime fait une vidéo sur ce sujet dans ses cours Flutter (chapitre « 5.1 - Styles et ressources » dans le cours « créer des apps avec Flutter 2.0 »). Je pense que cela pourrait résoudre ton problème de fichier .txt.
Pour le partage entre les environnement, je passe par Github ce qui est très pratique pour passer d’un OS à l’autre, mais aussi pour la gestion de branches, historique de travail, etc. Je te conseille vivement de passer par Git pour tout projet, même perso.

Sinon j’ai aussi trouvé ce package pour la gestion dont tu parles sur les fichiers dans le file system :

Merci pour votre réponse, je vais probablement transférer les données d’initialisation dans le projet. Ce qui n’ennuie un peu, sous IOS on peut créer la base où l’on veut dans le filesystem alors que sous windows cela ne semble pas possible (même pb pour le await $FloorAppDatabase.databaseBuilder(MyConstants.databaseName).build():wink: ce que j’aimerai faire également sous Windows. Mais peut-être est-ce une limitation (j’espère temporaire de Floor).
Cordialement.