Comment lire le chemin actuel de | DataDirectory | depuis les parameters de configuration

J’écris un programme qui demande à l’utilisateur de sélectionner la firebase database active au démarrage de l’application. J’ai un Windows Form qui listera les bases de données stockées dans un sous-dossier de ApplicationData spécialement pour stocker les fichiers de firebase database. Cependant, lorsque je crée une nouvelle firebase database, je dois copier la firebase database de modèles, mais je ne peux pas savoir où elle est stockée par défaut.

J’ai essayé:

dpath = ConfigurationManager.AppSettings["DataDirectory"]; 

Je semble toujours obtenir une valeur nulle en retour si. À un moment donné, j’ai abandonné et j’ai pensé que je pouvais simplement définir le répertoire DataDirectory sur un dossier de mon choix, mais il semble que j’ai agi trop tard dans l’exécution de mon programme pour qu’il prenne effet.

 newdpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyAppFolder"; 

J’apprécierais toutes les suggestions sur la manière de trouver l’emplacement de la firebase database ou de la configurer moi-même suffisamment tôt pour affecter le fonctionnement du programme.

MODIFIER:

Pour la deuxième partie, j’ai découvert que j’essayais de modifier la chaîne de connexion après l’ exécution d’ une commande TableAdapter.Fill , ce qui explique pourquoi elle ouvrait la firebase database par défaut. Ce mystère a été résolu. La première partie rest cependant inconnue.

Je vous remercie.

|DataDirectory| ne vient pas des parameters de configuration; vous mélangez trois choses différentes:

 ConfigurationManager.AppSettings["DataDirectory"] 

Cela vient des parameters de configuration; un fichier .config que vous devez créer et mettre dans votre projet. Ce paramètre particulier est la valeur de l’élément avec la clé "DataDirectory" dans l’élément AppSettings . Cela n’existe pas à moins que vous n’en mettiez un dans le fichier .config. En général, c’est là que vous mettez des données de configuration ou de démarrage qui ne sont jamais modifiées. Vous ne devriez pas mettre les chemins de fichiers ici, car ils peuvent être différents sur les utilisateurs de la machine qui installent votre firebase database.

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

Il s’agit du chemin d’access au dossier de données de l’application itinérante de l’utilisateur actuel défini par le système d’exploitation sur lequel votre application a été installée. Vous ne pouvez pas changer cela, il est défini par le système d’exploitation. Vous pouvez être sûr que ce dossier est accessible en écriture pour l’utilisateur et qu’il sera disponible si l’utilisateur se déplace ou se connecte à partir d’un autre ordinateur. C’est généralement à cet endroit que vous souhaitez placer des données utilisateur modifiables.

 SqlConnection("Data Source=|DataDirectory|DatabaseFileName.sdf;...") 

Ceci est une chaîne de connexion pour une connexion ADO.NET. ADO.NET traite spécialement les barres verticales. Il recherche des données AppDomain correspondant au nom de la clé entre les barres verticales. Vous pouvez obtenir les mêmes données avec:

 AppDomain.CurrentDomain.GetData("DataDirectory") 

Alors, qu’est-ce qui écrit la valeur de DataDirectory ? C’est fait par tout ce qui déploie votre exécutable:

  • Les installateurs .MSI le définissent comme le dossier cible de l’application.
  • ClickOnce définit un dossier de données spécial dans votre projet.
  • Les applications Web utilisent le dossier App_Data.
  • Le débogueur Visual Studio utilise le dossier de débogage.

Notez que les installateurs .MSI peuvent autoriser l’utilisateur à modifier le répertoire DataDirectory; C’est pourquoi vous ne devez jamais coder en dur ni modifier DataDirectory . Si vous le faites, il est impossible de trouver où les données de votre application ont été déployées. Vous utilisez généralement le dossier DataDirectory pour les données binarys en lecture seule déployées avec votre exécutable.

Si vous avez besoin d’écrire sur les données déployées avec votre exécutable, vous devez d’abord les copier dans un endroit où l’utilisateur sait pouvoir écrire, par exemple dans Environment.SpecialFolder.ApplicationData , puis écrire sur la copie. Non seulement DataDirectory n’est pas nécessairement accessible en écriture aux utilisateurs, mais il fait partie du déploiement et ne fait pas partie des données de l’utilisateur. si vous réparez ou désinstallez votre exécutable, DataDirectory est réinstallé ou supprimé. Les utilisateurs n’aiment pas cela lorsque vous supprimez leurs données. Ne l’enregistrez donc pas dans DataDirectory .