2014-05-02 1 views
-1

J'ai un programme qui a été exécuté en tant que tâche planifiée pendant un certain temps. J'ai fait un changement, même pas lié au TextReader et ai placé une copie du .exe de retour sur le serveur (Server 2003 R2 SP2) et maintenant quand vous exécutez le programme des tâches programmées ou juste en double cliquant sur le .exe la ligne suivante essaie de lire le fichier IPAddressMonitor.ini de C: \ Documents and Settings \ user \ au lieu de dans le dossier le .exe est dans C: \ IPAddressMonitor. Une idée pourquoi?Chemin de fichier C# utilisant TextReader par défaut vers Documents and Settings

TextReader tr = new StreamReader("IPAddressMonitor.ini"); 
+1

faites quelque chose (manuellement ou vous via le codage) qui pourrait changer le répertoire de travail en cours? – Steve

+0

Pas de codage. Ce que vous voyez est ce que je cours. Ai-je mal compris que le répertoire dans lequel le .exe est exécuté devrait être où il tire le .ini? –

+0

Je ne sais pas pourquoi cela se produit, mais vous pouvez toujours utiliser la réflexion pour obtenir le chemin vers le fichier .exe - alors tant que votre .ini est dans le même dossier que l'exécutable (ou quelque chose par rapport), vous avez gagné Ne rencontrez plus ce problème – rwisch45

Répondre

1

Utiliser la réflexion pour obtenir le chemin de votre exécutable - puis aussi longtemps que votre .ini est dans le même dossier que l'exécutable (ou somehwere par rapport à lui), vous ne fonctionnera plus sur ce problème:

static public string AssemblyDirectory 
{ 
    get 
    { 
     string codeBase = Assembly.GetExecutingAssembly().CodeBase; 
     UriBuilder uri = new UriBuilder(codeBase); 
     string path = Uri.UnescapeDataString(uri.Path); 
     return Path.GetDirectoryName(path); 
    } 
} 

ou

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 

Voir this SO post pour plus d'infos

Questions connexes