Espaces dans un chemin d'accès

Résolu
ssmint Messages postés 43 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 5 décembre 2008 - 31 août 2006 à 12:28
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 6 sept. 2006 à 22:45
Bonjour à tous,

mon petit problème du jour, c'est de pouvoir utiliser dans fonctions ayant besoin d'un chemin d'accès en argument...  Genre fopen, ShellExecute, FindFirstFile, ect...
Ca ne marche pas lorsque je mets un chemin avec espace, genre "C:\\Program File\"...
Donc quel caractère utiliser? Où s'il y a un autre moyen??

merci d'avance.
@+
 

18 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
31 août 2006 à 14:21
SAKingdom, j'ai rien compris à ta réponse :)

Je crois que le problème est au niveau des espaces dans les chemins.
Je crois qu'il faut utiliser des guillemets lots de l'appel du programme, sinon il considère qu'il y a plusieurs arguments:

programmes.exe "C:\Program Files\etc"

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
31 août 2006 à 14:44
Si tu appelles un programme avec un chemin avec des espaces, tu as un problème:
programmes.exe C:\Program Files\etc
-> programme va croire qu'on lui passe deux arguments (C:\Program et Files\etc)

programmes.exe "C:\Program Files\etc"
-> programme ne recoit qu'un seul argument

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 août 2006 à 14:16
FILE *file;

file = fopen("c:\\windows\\test.txt", "r");

if(file == NULL)
{
    printf("problème\n");
    return 0;
}

Si il existe bien un fichier test.txt dans ton répertoire Windows, il n'y aura pas de problème. C'est théoriquement impossible. Si il y a un problème durant l'ouverture, il sera detecté dans ce code.
Au fait, si le compilateur revoie des érreures, peux tu nous dire lequelles?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 août 2006 à 14:30
Désolé. C'est pas encore claire.
Le problème peut venir aussi du fait qu'il soit, peut-être, en UNICODE. Dans ce cas, suffis d'ajouter un L ou TEXT devant la chaine:

wfopen(L"c:\\windows\\text.txt", L"r");
ou
wfopen(TEXT("c:\\windows\\text.txt"), TEXT("r"));

et bien sûr, d'utiliser des fonctions UNICODE. Ou sinon, de désactiver UNICODE dans les propriétés du projet.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0

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

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 août 2006 à 14:32
_wfopen pardon.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
31 août 2006 à 14:34
Je vois toujours pas le rapport
Le problème ce sont les ESPACES

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 août 2006 à 14:41
Il dit qu'il a un problème lorsqu'il utilise par exemple "C:\\Program File\"... en argument de fopen etc. Si il est en UNICODE, c'est normale que ça ne fonctionne pas.
Sinon, je n'ai jamais eu de problème avec les espaces. Je trouve ça bizzare.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
31 août 2006 à 14:48
Ok je comprend ce que tu veux dire. Cependant, il dit qu'il a aussi un problème avec fopen et FindFirstFile. Tu crois que le problème soit les espaces là aussi (je sais pas je demande).

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
31 août 2006 à 17:27
Perso (sur un autre langage de programation je passait par les short path name ex
"C:\\long directory name" donne "c:\\LONGDI~1" il n'y a jamais d'espace
Je viens de voir que ces fonction existe sur c++ GetShortPathName et GetFullPathName

Mais je ne m'en suis jamais servi
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
31 août 2006 à 17:30
Le problème ne dépend pas du langage de programmation, mais de la manière dont le programme est appelé et dont les arguments sont écrits

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
31 août 2006 à 17:35
Lol oui mais ce n'est pas ce que je voulait dire, en fait j'ai eu le meme probleme sur un autre langage et j'ai utlisé ces 2 fonctions pour m'en sortir et je viens de voir quelles existe aussi en c++.

En fait elle permette d'obtenir le "short version of a long filename" c'est le nom du fichier sous le vieux ms-dos (qui ne gere ni les long nom ni les espaces). Les 2 chemins sont 100/100 identique pour XP a part que l'un ne possede aucun espaces et donc ca m'avait aidé.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
31 août 2006 à 17:44
Tu as deux arguments qui contiennent chacun la moitié du chemin, donc sur quoi appeler tes fonctions?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
31 août 2006 à 17:58
Ben sans voir le code je ne sait pas trop ce qu'il veut faire, avec les guillemets je pense que c'est possible pour shellExecute quitte a passer par le code ASCII mais sinon par exemple.

ShellExecute(NULL, NULL, "prog.exe c:/rep 1/prog1.txt c:/rep 1/prog2.txt", NULL, NULL, SW_SHOWMAXIMIZED);
Si le fichier prog.exe ne gere pas les espaces je faisait

GetShortPathName("c:/rep 1/prog1.txt",
buffer1,
BUFSIZE);

GetShortPathName("c:/rep 1/prog2.txt",
buffer2,
BUFSIZE);

sprintf(chaine, "prog.exe %s %s, buffer1,buffer2);
ShellExecute(NULL, NULL, chaine, NULL, NULL, SW_SHOWMAXIMIZED);

ce qui devrait donner si je me suis pas planté
ShellExecute(NULL, NULL, "prog.exe C:/REP~1/PROG1.TXT C:/REP~1/PROG2.TXT", NULL, NULL, SW_SHOWMAXIMIZED);
0
ssmint Messages postés 43 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 5 décembre 2008
3 sept. 2006 à 14:11
Merci Vecchio56 comme d'hab Réponse acceptée !
 
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
3 sept. 2006 à 14:18
Je ne comprend pas. Avec ShellExecute, oui c'est normal mais avec fopen et FindFirstFile.... Les espaces ne cause pas de problème avec fopen. Ça signifie que le problème pour ces fonctions vien peut-être d'ailleur.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
3 sept. 2006 à 18:08
En passent, qu'elles était les fonctions avec lesquelle tu avais des problèmes?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
0
ssmint Messages postés 43 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 5 décembre 2008
6 sept. 2006 à 01:00
Les fonctions qui posaient problèmes étaient FindFirstFile et GetFileAttribute...
Il n'y a pas de problèmes d'espaces avec les fonctions ShellExecute et fopen ou encore d'autre fonctions que j'ai utilisé dans ce prog comme CreateDirectory, RemoveDirectory, DeleteFile, MoveFile, ect...

Merci quand même @+
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
6 sept. 2006 à 22:45
Il n'y a pas de problèmes avec ShellExecute? Pourtant, c'est lui qui aurais dû causer problème avec les espaces? C'est bizarre...

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
0
Rejoignez-nous