Dans mon travail récent, je souhaite créer un petit outil pour les rappels clients ; Naturellement, le programme winform doit lire le fichier de configuration du même répertoire que l’application (et non le fichier exe.config) ;
Pour lire le répertoire où se trouve l’application actuelle, j’ai immédiatement pensé à System.Environment.CurrentDirectory pour obtenir le répertoire de travail actuel. Le programme semble fonctionner parfaitement ;
Quand je suis arrivé au travail le lendemain matin, il est apparu : « Fichier de configuration lu manquant ». L’application ajoute un démarrage automatique au démarrage. Ce message apparaît pour lire la défaillance du fichier de configuration, vérifier immédiatement si le fichier de configuration dans le répertoire de l’application a été supprimé de lui-même. Après vérification, j’ai constaté que le fichier était toujours là, j’ai quitté le programme et l’ai relancé
Toujours bien, aucun profil de lecture contextuel manquant. Ensuite, voir si le chemin de l’entrée de démarrage dans le registre n’est pas dans mon répertoire ? En regardant le fichier de chemin, tout va bien. Un peu confus ? Je me déconnecte de l’ordinateur et j’essaie de redémarrer, il apparaît toujours que le fichier de configuration manque. La raison de l’incapacité à trouver le chemin sera directement prise en compte
MessageBox, le programme s’exécute et découvre que le chemin est bien ce chemin.
Ajoutez le code MessageBox et continuez à démarrer le test. Au démarrage, j’ai constaté que le dossier actuel qui s’affichait était C :\Windows\System32, et j’ai été tout de suite perplexe. Je me suis dit, est-ce que le programme de Lao Tzou a été mené à system32 ? En vérifiant le registre et sysetm32, mon application n’est pas disponible. Enfin, j’ai pensé qu’il devrait y avoir un problème avec le code pour obtenir le chemin.
Après de nombreux tests, il a été constaté que System.Environment.CurrentDirectory est effectivement destiné à obtenir le répertoire courant, mais si le programme A appelle le programme B et que le programme B utilise System.Environment.CurrentDirectory pour obtenir le répertoire. Alors, le répertoire obtenu dans le programme B n’est plus celui où se trouve l’application B ; Il devient le répertoire où se trouve A. Il n’est pas difficile de trouver que le dossier qui apparaît au démarrage est C :\Windows\System32, car le programme d’autodémarrage est aussi appelé par un processus sous Windows.
Par conséquent, si le programme winform souhaite obtenir le répertoire où se trouve l’application actuelle, il est préférable de ne pas utiliser System.Environment.CurrentDirectory. Au lieu de cela, c’est : Application.StartupPath Ainsi, peu importe qui l’appelle.
Code de test :
Transféré depuis :La connexion hyperlientérée est visible.
|