Comment puis-je lire le chemin d'accès actuel |DataDirectory| à partir de paramètres de configuration
Je suis en train d'écrire un programme qui demande à l'utilisateur de sélectionner la base de données active au démarrage de l'application. J'ai un Formulaire Windows qui liste les bases de données stockées dans un sous-dossier de ApplicationData spécialement pour stocker les fichiers de base de données. Lorsque je crée une nouvelle base de données, cependant, j'ai besoin de copier le modèle de base de données, mais ne peut pas trouver l'emplacement de stockage par défaut.
J'ai essayé:
dpath = ConfigurationManager.AppSettings["DataDirectory"];
J'ai toujours l'impression pour obtenir une valeur null en retour. À un moment, j'ai abandonné et pensé que je pourrais juste mettre le DataDirectory dans un dossier de mon choix, mais il semble que je fais trop de retard dans l'exécution de mon programme pour qu'il prenne effet.
newdpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyAppFolder";
J'aimerais avoir des suggestions sur la façon de trouver l'emplacement de la base de données, ou de définir moi-même assez tôt pour affecter le fonctionnement d'un programme.
EDIT:
Pour la deuxième partie, j'ai découvert que j'étais en train de modifier la chaîne de connexion après un TableAdapter.Remplir commande avait déjà été effectuée, ce qui explique pourquoi il a été l'ouverture de la base de données par défaut. Ce mystère a été résolu. La première partie, mais est encore un inconnu.
Merci.
OriginalL'auteur PAUL DUFRESNE | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
|DataDirectory|
ne vient pas de paramètres de configuration; vous êtes le mélange jusqu'à trois choses différentes:Cela vient de la config paramètres; un .fichier de configuration que vous avez à créer et à mettre dans votre projet. Ce paramètre est la valeur de l'élément avec la clé
"DataDirectory"
dans leAppSettings
élément. Ce qui n'existe pas, sauf si vous en mettre un dans la .fichier de configuration. Généralement c'est là que vous mettez de configuration de démarrage ou de données qui n'est jamais modifié. Vous ne devriez pas mettre les chemins de fichiers, ici, comme ils peuvent être différents sur la machine des utilisateurs de l'installation de votre base de données.C'est le chemin d'accès de l'utilisateur actuel de l'itinérance dossier de données d'application défini par le système d'exploitation de votre application a été installée. Vous ne pouvez pas changer cette situation, il est défini par le système d'exploitation. Vous pouvez être sûr que ce dossier est accessible en écriture par l'utilisateur, et sera disponible que si l'utilisateur se déplace, ou se connecte à partir d'une autre machine. C'est généralement à l'endroit où vous souhaitez placer modifiable données de l'utilisateur.
C'est une chaîne de connexion pour un ADO.NET connexion. ADO.NET traite des barres verticales spécialement, il recherche un AppDomain appariement de données le nom de la clé entre les barres verticales. Vous pouvez obtenir les mêmes données avec:
Donc ce qu'écrit la valeur de
DataDirectory
? C'est fait par ce que déploie votre exécutable:Noter que .MSI installateurs peuvent permettre à l'utilisateur de modifier le DataDirectory; c'est pourquoi vous devriez ne jamais coder en dur ou modifier
DataDirectory
, si vous faites cela, il n'y a aucun moyen de savoir où vos données d'application a été déployée. Vous utilisez généralement leDataDirectory
dossier pour la lecture seule des données binaires déployé avec votre exécutable.Si vous avez besoin d'écrire les données déployé avec votre exécutable, vous devez tout d'abord copier quelque part vous savez que l'utilisateur sera en mesure d'écrire, comme à
Environment.SpecialFolder.ApplicationData
, et d'écrire sur la copie. Non seulement estDataDirectory
pas forcément accessible en écriture pour les utilisateurs, il est le cadre du déploiement et ne fait pas partie des données de l'utilisateur; si vous le réparer ou de le désinstaller de votre exécutable puisDataDirectory
obtient réinstallé ou supprimés. Les utilisateurs n'aime pas quand vous supprimer leurs données, afin de ne pas les enregistrer surDataDirectory
.J'ai essayé de récupération 3e dossier comme une chaîne de caractères, mais je reçois un null. Ce serait dans le contexte de VisualStudio débogueur. J'ai essayé le suivant: string defaultpath = domaine d'application.CurrentDomain.GetData("DataDirectory").ToString(); mais pas de chance. Suggestion?
hmmm... je reçois DataDirectory null à partir du débogueur. Essayez
AppDomain.CurrentDomain.BaseDirectory
. Désolé, ne savent pas la différence entre DataDirectory et BaseDirectory désinvolte.Quelqu'un m'a suggéré que j'utilise le AppBase dossier, mais je comprends que cela ne serait valable avec certains installateurs.
Malheureusement, si vous permettez aux utilisateurs de spécifier le dossier d'installation, vous devez utiliser une propriété de déploiement comme
DataDirectory
ouBaseDirectory
.OriginalL'auteur Dour High Arch