System.IO.Path.GetFullPath & quotes (")

scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 9 oct. 2008 à 18:57
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 16 oct. 2008 à 09:43
glop glop,

je voudrais juste vérifier un petit point sur la fonction :
System.IO.Path.GetFullPath ()

si on a en entrée :
string str = ""c:\\My Application.exe"";

bah je dirais que visiblement il n'aime pas les "" qui entourent le path complet. Est ce normal ?

thx,

Vincent

----------------------------
C++ forever
C# amateur
A voir également:

15 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
9 oct. 2008 à 20:05
Bonsoir;

http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

ArgumentException, path is a zero-length string, contains only white space, or contains one or more of the invalid characters defined in GetInvalidPathChars.

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx

The array returned from this method is not guaranteed to contain the complete set of characters that are invalid in file and directory names. The full set of invalid characters can vary by file system. For example, on Windows-based desktop platforms, invalid path characters might include ASCII/Unicode characters 1 through 31, as well as quote ("), less than (<), greater than (>), pipe (|), backspace (\b), null (\0) and tab (\t).

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
9 oct. 2008 à 20:20
hum oui ca explique que ça ne marchera pas.

Maintenant la question est :
doit-on ré-inventer la roue pour traiter ces cas de figure ou bien est ce que cela existe ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
9 oct. 2008 à 20:47
Un path ne se donne pas avec des guillemets généralement, non? Il ne s'agit donc pas vraiment de réinventer la roue...
Tu peux faire passer ton string dans une Regex pour nettoyer ce qu'il faut et ensuite tu envoyes à la fonction GetFullPath.

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
10 oct. 2008 à 00:04
Ouvre une console texte sous windows
c:
cd\
cd Pro  (et complète avec la touche TAB)
ça donne :

cd "Program Files"

ou bien la même chose :

cd c:\Pro    (TAB)
cd "c:\Program Files"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
10 oct. 2008 à 08:11
Oui oui je sais... ;-)
Mais je n'ai pas d'autres solution à te donner... en même temps, c'est 2 lignes de codes donc....

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
10 oct. 2008 à 09:20
pour le 1er param, oui c'est 2 lignes de code, je pense que je vais les rajouter.

C'est pour la suite que c'est plus sport chercher les doubles "", les espaces, les tab... bref un grand moment de programmation en perspective.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
10 oct. 2008 à 18:57
Avec une Regex c'est vite fait...
tout les espaces c'est \s*, un quote c'est " ...

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
11 oct. 2008 à 12:33
Le RegEx va permettre de les supprimer mais pas de découper en morceaux non .?

----------------------------
C++ forever
C# amateur
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
11 oct. 2008 à 23:20
Tu peux aussi....
Mais une fois que c'est filtré, tu peux utiliser la fonction GetFullPath. Je ne vois pas ou est le problème finalement...

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
11 oct. 2008 à 23:28
bah tu peux avoir le param1 entre " " mais pas le param2 mais le param 3 comme le 1.

Si on reprend l'exemple :
cd "c:\Program Files"

je ne suis pas sur que le RegEx fonctionne vu que l'on a 2 conditions différentes ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
12 oct. 2008 à 22:17
Mais si, dit moi exactement ce que tu veux faire et j'essayerai de te donner la bonne regex.

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
13 oct. 2008 à 10:02
Alors disons que l'on veut isoler les différents arguments pour un appel de fonctions.

voici les 2 tableaux pour les jeux de test :

string[] GoodSources =
            {
                // Short path, no path
                @"./My Application",
                @"My Application.exe",
                @"My Application",

                // Environment & short path
                "%WINDIR%/My Application.exe",
                @"c:\Progra~1/My Application.exe",

                // Relative path
                "./My Application.exe -install",

                // Multi extension
                "./My Application.doc.exe -install",

                // Multi parameters
                "./My Application.doc.exe param1 param2",

                // Quotes
                @"My Application.exe 'param1'",
                @"My Application.exe 'My Test String'"
            };

            string[] BadSources =
            {
                @"c:\My Application.exe 'c:\toto.exe'",
                @"My Application.exe ""c:\toto.exe""",
                ""c:\\My Application.exe"",
                ""My Application.doc.exe"",
                ""./My Application.doc.exe" param1 param2",
                ""./My Application.doc.exe" "param1" "param2""
            };

Pour le premier, tout est bon avec les appels :
string strFileName = System.IO.Path.GetFileName(FullPath);
string strArgs = System.IO.Path.GetExtension(FullPath);
System.IO.Path.GetDirectoryName(FullPath);
System.IO.Path.GetPathRoot(FullPath);

et un peu de traitement interne.

Pour le second tableau, tout est foireux.

Allez, on s'y met une bonne fois pour toute et je pose la source complète ;p
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
13 oct. 2008 à 14:17
Peut-être qqch comme ceci:

string cleanedPath=
Regex.Replace(myPath,
"[\'|"]([^\'"]*)[\'|"]",
"$1",
RegexOptions.Singleline |
RegexOptions.IgnoreCase);

<hr />
-My Blog-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
14 oct. 2008 à 12:23
Alors?

<hr />
-My Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
16 oct. 2008 à 09:43
Voici ceux pour lesquels le résultat obtenu n'est pas celui escompté :

"My Application.exe 'param1'"  => "My Application.exe param1"
"My Application.exe 'My Test String'" => "My Application.exe My Test String"

en fait, il faut bien les supprimer mais je dois pouvoir faire le découpage de mes arguments par la suite aussi.

----------------------------
C++ forever
C# amateur
0