199 votes

Ouvrir un dossier en utilisant Process.Start

J'ai vu le autre sujet et j'ai un autre problème. Le processus démarre (vu dans le gestionnaire de tâches) mais le dossier ne s'ouvre pas sur mon écran. Quel est le problème ?

System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");

0 votes

Êtes-vous sûr que votre chemin est correct ?

1 votes

Pourquoi voulez-vous appeler Explorer manuellement ? Pourquoi ne pas simplement ouvrir le dossier, c'est-à-dire appeler Process.Start avec un ProcessStartInfo avec UseShellExecute réglé sur true et Verb réglé sur "open" ?

1 votes

Oui, j'ai essayé d'ouvrir 'explorer.exe' sans le chemin et ça n'a pas marché non plus.

329voto

Fredrik Mörk Points 85694

Avez-vous vérifié que le dossier " c:\teste "existe ? Si ce n'est pas le cas, l'explorateur s'ouvrira en montrant un dossier par défaut (dans mon cas " C:\Users\[user name]\Documents ").

Mise à jour

J'ai essayé les variations suivantes :

// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");

Si aucune d'entre elles (sauf celle qui lève une exception) ne fonctionne sur votre ordinateur, je ne pense pas que le problème se situe dans le code, mais dans l'environnement. Si c'est le cas, j'essaierais l'une (ou les deux) des solutions suivantes :

  • Ouvrez la boîte de dialogue Exécuter, entrez "explorer.exe" et appuyez sur Entrée.
  • Ouvrez une invite de commande, tapez "explorer.exe" et appuyez sur la touche Entrée.

0 votes

J'en suis sûr et s'il n'existait pas, ouvrirait-on n'importe quel dossier de la même manière, ou pas ?

0 votes

J'ai ouvert explorer.exe via cmd et ouvert normalement Aucun des Processs.Start n'a fonctionné sauf 'Process.Start(@"c : \does_not_exist ");' qui a déclenché une exception

2 votes

Petite différence si la fenêtre de l'explorateur est déjà ouverte : Process.Start(path) active la fenêtre (elle ne peut que clignoter dans la barre des tâches, elle n'est pas mise en avant) ; explorer.exe +paramètre ouvre une nouvelle fenêtre toujours à l'avant (mais plusieurs fois la même fenêtre). Les deux ont donc des inconvénients.

87voto

OregonGhost Points 16615

Pour être complet, si tout ce que vous voulez faire est d'ouvrir un dossier, utilisez ceci :

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

Assurez-vous que FileName se termine par Path.DirectorySeparatorChar pour qu'il pointe sans ambiguïté vers un dossier. (Merci à @binki).

Cette solution ne fonctionnera pas pour ouvrir un dossier et sélectionner un élément, car il ne semble pas y avoir de verbe pour cela.

0 votes

Cela fonctionne pour moi, aussi bien sous Windows que sous Linux avec Mono.

3 votes

Si vous utilisez cette méthode et un dossier tel que C:\teste.exe o C:\teste.cmd existe, l'Explorer s'ouvrira sur cet autre dossier au lieu de celui que vous aviez prévu. Pour éviter cela, vous pouvez ajouter un Path.DirectorySeparatorChar au chemin. Voir comment VS lui-même fait la même erreur .

0 votes

Étant donné la réponse de @Scyssion qui utilise "/select", on pourrait penser que vous pouvez utiliser Verb = "select" mais hélas, vous ne pouvez pas. Quoi qu'il en soit, excellente réponse !

6voto

Joel Coehoorn Points 190579

Vous n'avez pas besoin de la double barre oblique inverse lorsque vous utilisez des chaînes de caractères non formatées :

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

5voto

Kevin Laity Points 1671

Vous utilisez le symbole @, qui supprime la nécessité d'échapper les antislashs.

Retirer le @ ou le remplacer \\ avec \

0 votes

Le dossier ne s'ouvre toujours pas Seul le processus est lancé dans le gestionnaire des tâches.

0 votes

Je n'ai pas d'autres suggestions, j'ai pu tester et faire fonctionner le système en Visual C# express 2008.

2 votes

Je dirais... des zèbres. Il y a un problème avec votre explorateur, peut-être un virus ou autre...

4voto

Leonardo Maxson Points 21

Vous devez utiliser l'un des System.Diagnostics.Process.Start() surcharges. C'est très simple !

Si vous ne placez pas le nom de fichier du processus que vous voulez exécuter ( explorer.exe ), le système le reconnaîtra comme un chemin de dossier valide et tentera de l'attacher au processus Explorer déjà en cours. Dans ce cas, si le dossier est déjà ouvert, l'Explorer ne fera rien.

Si vous placez le nom de fichier du processus (comme vous l'avez fait), le système essaiera d'exécuter une nouvelle instance du processus, en passant la deuxième chaîne comme paramètre. Si la chaîne est un dossier valide, il est ouvert sur le processus nouvellement créé, sinon, le nouveau processus ne fera rien.

Je ne sais pas comment les chemins de dossiers invalides sont traités par le processus dans tous les cas. Utilisation de System.IO.Directory.Exists() devrait suffire pour s'en assurer.

1 votes

N'oubliez pas que vous devez ajouter un fichier Path.DirectorySeparatorChar . Sinon, si un dossier avec le même nom mais .cmd o .exe ou éventuellement d'autres suffixes, l'Explorateur s'ouvrira sur cet autre dossier - ou si ce sont des exécutables ou des scripts, il les exécutera au lieu d'ouvrir le dossier comme vous l'aviez prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X