2009-07-09 5 views
0

J'ai une application qui écrit dans un dossier sur le lecteur C: \. Le programme fonctionne bien sur mon ordinateur, mais sur un autre ordinateur portable lors de l'exécution du fichier .exe (L'autre ordinateur portable n'a pas de studio visuel etc.), j'obtiens une exception filenotfound et je ne peux pas identifier la ligne de code.C# WriteDirectory Problème

Voici le code pour la création du répertoire (en supposant que c'est la question)

 try 
     { 
      WriteDirectory = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\SMS Notifier\"); 
      if (!WriteDirectory.Exists) 
       WriteDirectory.Create(); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

Toutes les idées que le problème pourrait être? Dois-je vérifier la permission d'écriture?!

Aide grandement appréciée!

Répondre

2

Je suppose que ce n'est pas le vrai problème; ni DirectoryInfo.Create ni Directory.CreateDirectory ne lancent une exception FileNotFoundException.

Le meilleur pari est de construire l'application pour le débogage, puis copiez le fichier avec tout ce qu'il est.fichiers pdb; J'espère que cela vous donnera les méthodes et les numéros de ligne dans votre message d'erreur.

Vous pouvez également envisager d'ajouter un gestionnaire pour toute exception non gérée. le AppDomain.UnhandledException peut être géré afin que vous puissiez ajouter votre propre gestionnaire d'événements pour toute exception non gérée s'exécutant n'importe où dans l'application;

Ajoutez quelque chose comme ceci à votre fonction principale;

System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); 

Ensuite, écrivez votre propre gestionnaire pour l'erreur;

static void MyHandler(object sender, UnhandledExceptionEventArgs args) { 
    Exception e = (Exception) args.ExceptionObject; 
    Console.WriteLine("MyHandler caught : " + e.Message); 
} 
1

Ce chemin existe-t-il sur l'ordinateur portable?

Environment.SpecialFolder.ApplicationData 

Faites un Debug.WriteLine sur cette ligne comme un messagebox.show et voir ce que le chemin est? également si le chemin existe, il peut être une permissions issue..most probablement

+0

Je ne pense pas que ce serait important si oui ou non un dossier spécial existe car la vérification pour cela "WriteDirectory.Exists" couvrirait cela. Le problème est un problème d'autorisation d'écriture sur le lecteur C. – James

+0

Oui, il y a un problème d'autorisations mais cela pourrait être dû à la tentative de créer le dossier au mauvais endroit, donc il vaut mieux vérifier que le chemin est celui prévu. Le framework – Calanus

1

La première chose que je pourrais faire (pour le débogage) est d'insérer une

MessageBox.Show(WriteDirectory.FullName); 

avant d'essayer de créer le répertoire juste voyez si ce chemin "spécial" est ce que vous pensez qu'il est!

1

L'utilisation de throw; au lieu de throw e; conservera la trace de pile d'origine dans l'exception. Si vous placez un Console.WriteLine(e.ToString()); (ou un équivalent MessageBox) dans le bloc de capture, la trace de la pile sera affichée en sortie (vous aurez besoin d'une version de débogage pour la plupart des informations).

Si tout le reste échoue, l'ancienne norme des instructions de suivi Console.WriteLine("about to do x"); aidera - avec l'application lancée à partir d'une ligne de commande.

5

Si vous déployez les fichiers .pdb avec vos fichiers .dll, vous obtiendrez des numéros de ligne dans les messages d'exception!

Votre bloc try..catch ne fait rien d'utile, tout ce qu'il fait est d'avaler la trace de la pile pour que vous ne puissiez pas voir ce qui se passe! Je suggère de supprimer entièrement le bloc try..catch.

throw e; provoque la perte de la trace de la pile, utilisez throw; pour le préserver.

Vous devez également utiliser System.IO.Path.Combine() pour ajouter le répertoire racine et le nom du sous-répertoire, de cette façon, vous n'avez pas à vous soucier de faire les \ vous-même et éventuellement faire une erreur.

0

Le framework .Net est-il installé sur l'ordinateur portable?

autre possibilité: la plateforme ne supporte pas ce répertoire. Vérifiez les plates-formes compatibles sur msdn

+0

.net est installé et crée le répertoire avec succès. Il semble alors être incapable d'écrire à lui .... mais ive décoche la boîte de lecture seule sur le dossier !? – Goober