C# + commande DOS + nom avec espace [Résolu]

cs_tibo007 4 Messages postés dimanche 4 janvier 2004Date d'inscription 9 février 2007 Dernière intervention - 7 févr. 2007 à 18:47 - Dernière réponse : cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention
- 10 févr. 2007 à 00:29
    Bonjour à tous,

J'ai un petit problème qui est en train de me bouffer mon temps.
Je dois lancer a partir d'une appli .net une executable stockée dans un dossier avec nom a rallonge.
Je vous présente mon code afin de mieux comprendre la bete:

 string halfpath = Application.StartupPath.Normalize(); //je recupere le chemin de mon appli
A ce moment là, mon chemin est de la forme :
"C:\\Documents and Settings\\KpTn\\Bureau\\monappli\\appli\\bin\\Debug"
Je cherche ensuite a mettre des guillements autour des noms avec espaces :
            string[] tmp1=halfpath.Split('\\');
            string result = "";
            for (int i = 0; i < tmp1.Length; i++)
            {
                if(tmp1[i].ToString().Contains(" "))
                    result = result + """ + tmp1[i].ToString() + """ + @"";// si nom long je rajoute les guillements autour
                else
                    result = result + tmp1[i].ToString() + @""; // sinon je laisse comme c'etait
            }

            string path =  result + "Resources" + @"" + "ffmpeg.exe" + " -i C:" + @"" + "test.avi C:" + @"" + "result.flv";
On obtient:

"C:\\"Documents and
Settings"\\KpTn\\Bureau\\monappli\\appli\\bin\\Debug\\Resources\\ffmpeg.exe
-i C:\\test.avi C:\\result.flv"
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(path);
            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            try
            {
                System.Diagnostics.Process.Start(psi); // je lance ma commande
            }
            catch (Exception exc)
            { }

Et bien sur ca ne marche pas il me dit qu'il ne trouve pas le fichier alors que si je tape la commande a la main dans une fenetre DOS, en enlevant bien sur les / en trop, ca tourne impecc...

J'espere que quelqu'un pourra me donner quelques indications et pourra par la meme occaz me donner des astuces quant à la maniere dont je traite ce cas!!

Merci

tibo
Afficher la suite 

3 réponses

Répondre au sujet
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 8 févr. 2007 à 08:41
+3
Utile
Hello,

Tu te complique la tâche. il n'y a pas besoin de mettre des guillemets, le psi se charge de ça.
Par contre, pour ajouter des arguments à ta commande, il faut les passer dans psi.Arguments.

En gros :

string halfpath = Application.StartupPath.Normalize(); 
string path =  halfpath + @"Resources\ffmpeg.exe"
On obtient:
"C:\Documents and Settings\KpTn\Bureau\monappli\appli\bin\Debug\Resources\ffmpeg.exe"
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(path);
            psi.Arguments = @"-i C:\test.avi C:\result.flv";
            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            try
            {
                System.Diagnostics.Process.Start(psi); // je lance ma commande
            }
            catch (Exception exc)
            { }

Et voilà le travail.

Amicalement, SharpMao
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SharpMao
cs_tibo007 4 Messages postés dimanche 4 janvier 2004Date d'inscription 9 février 2007 Dernière intervention - 8 févr. 2007 à 09:14
0
Utile
SharpMao, si tu passes sur Lyon, hésite pas a me contacter pour que je te paye un coup à boire!!!!
Merci encore pour ta rapidité.
A bientot pour d'autres questions...

tibo
Commenter la réponse de cs_tibo007
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 10 févr. 2007 à 00:29
0
Utile
Salut,

J'en profite pour plaider un coup en la faveur de mon amie Path.Combine :
string path =  halfpath + @"Resources\ffmpeg.exe"
> string path   Path.Combine(halfpath, @"Resources\ffmpeg.exe");

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.