Question

Eh bien, si je veux stocker des données pour une machine à une large application i utilise simplement

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

Et si je veux stocker des données par l'utilisateur i utilise

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Mais si je veux enregistrer les données par instance d'application? je pourrais utiliser le dossier que l'application est stockée dans mais les pour ce type de stockage de données des dossiers « fichiers de programme » ne sont pas fait si je comprends bien ...

Edit: Pour clarifier ce que je voulais dire si j'installer l'application 2 fois dans des dossiers differnet ... pas d'instances en cours d'exécution désolé

.
Était-ce utile?

La solution

Je ne connais aucune autre application qui fait cela.

Si je lance deux copies de Visual Studio, par exemple, j'attends les paramètres de la dernière instance d'être fermés les persistaient.

Si vous attribuez une instance un identifiant unique (GUID) comment réutiliser-vous que la valeur prochaine fois que vous exécutez l'application? Ou voulez-vous obtenir un nouvel ensemble de valeurs chaque fois que vous exécutez l'application?

Si vous voulez réutiliser, vous pouvez créer des sous-répertoires numérotés (1, 2, 3, 4, etc.) et chaque fois que vous exécutez l'application écrire un fichier de verrouillage dans ce répertoire. Ensuite, vérifier la présence du fichier de verrouillage et augmenter le nombre jusqu'à ce que vous trouviez un dossier déverrouillé.

UPDATE

À la lumière du commentaire ajouté - pourquoi ne pas obtenir le chemin de l'exécutable et créer un dossier sous cette

?

Si l'utilisateur ne dispose pas de droits à ce dossier, vous auriez à créer une sorte de correspondance entre l'emplacement et un GUID (par exemple) que vous ensuite ajoutées aux paramètres d'application et chemin paramètres utilisateur.

Autres conseils

Pourquoi ne pas stocker les données dans le répertoire temp Path.GetTempPath. Vous pouvez utiliser un sous-dossier pour votre application et un autre sous-dossier (peut-être un Guid que le nom serait utile) pour votre instance. Je mettre en œuvre une classe de gestionnaire qui implémente IDisposable pour permettre la suppression du chemin d'instance lorsque l'application se ferme.

Créez un dossier d'instance sous soit le dossier de données utilisateur ou le dossier de données de la machine si vous devez le faire. Votre application peut supprimer toutes les données non-voulu à la sortie. Bien que @ChrisF est juste sur le comportement le plus habituel.

Une possibilité serait de générer un identifiant unique la première fois que le programme fonctionne et le stocker quelque part spécifique au programme (peut-être un fichier de configuration local).

Ensuite, lorsque vous voulez accéder aux fichiers pour cette copie spécifique de l'application, il suffit d'utiliser

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "\" + uniqueid);

ou

System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "\" + uniqueid);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top