2010-07-21 9 views
3

j'ai le code qui récupère un chemin de direcotry sous 2 formes différentes. Si, dans une forme, je sélectionne un chemin pour ouvrir un fichier et le traiter, lorsque je retourne à l'autre formulaire, j'obtiens une erreur Direcotry Exception. Je l'habitude de chaînes différentes pour obtenir ce cheminPourquoi le chemin est changé se

Dans la deuxième forme, j'ai appelé ceci:

 string strFilePath2; 
     strFilePath2 = Directory.GetCurrentDirectory(); 
     strFilePath2 = Directory.GetParent(strFilePath2).ToString(); 
     strFilePath2 = Directory.GetParent(strFilePath2).ToString(); 
     strFilePath2 = strFilePath2 + "\\ACH"; 

Dans ma première forme, j'ai appelé:

 strFilePath = Directory.GetCurrentDirectory(); 
     strFilePath = Directory.GetParent(strFilePath).ToString(); 
     strFilePath = Directory.GetParent(strFilePath).ToString(); 
     strFilePath = strFilePath + "\\ACH\\" + Node; 

Pendant le débogage, je reçois sélectionné chemin de la deuxième forme, mais pas le chemin que je m'attendais. Quelqu'un peut-il dire pourquoi?

+0

S'il vous plaît mettre à l'exception de la question. –

Répondre

8

Avez-vous vérifié la valeur du répertoire courant?

Le OpenFileDialog sera généralement changer le répertoire courant. Vous pouvez contrôler ce comportement en utilisant la propriété RestoreDirectory:

OpenFileDialog ofd = new OpenFileDialog(); 

ofd.RestoreDirectory = true ; // this will not modify the current directory 

En aparté, vous concaténez des chemins dans votre exemple de code. Dans .NET, il est préférable d'utiliser la méthode statique Path.Combine. Cette méthode vérifie la présence d'une barre oblique inverse (ou quel que soit le caractère de séparateur de chemin du système est) et insérer automatiquement un s'il manque:

strFilePath = Path.Combine(strFilePath, "ACH"); 
3

Souvent cela dépend d'un appel d'un FolderBrowserDialog, un OpenFileDialog ou quelque chose de semblable. Ces boîtes de dialogue (et d'autres composants) modifient automatiquement le répertoire de travail de votre application en cours d'exécution.

Mon conseil est d'éviter d'utiliser pathes par rapport s'il y a une sorte d'interaction de l'utilisateur.

+0

J'utilise Openfiledialog pouvez-vous suggérer comment survivre à cela? – Dotnet

+0

Voir la bonne explication de Mark :-) –

3

OpenFileDialog et SaveFileDialog changer le chemin de travail en cours, ce qui est très gênant. Vous pouvez soit le réinitialiser manuellement, soit définir .RestoreDirectory = true; pour qu'il revienne après avoir sélectionné le fichier. Si vous utilisez FolderBrowserDialog, vous devrez le faire manuellement si vous avez toujours ce problème.

Questions connexes