Espaces dans un chemin d'accès

Résolu
Messages postés
43
Date d'inscription
mercredi 30 novembre 2005
Statut
Membre
Dernière intervention
5 décembre 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
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
<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
_wfopen pardon.

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

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
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
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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é.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
Tu as deux arguments qui contiennent chacun la moitié du chemin, donc sur quoi appeler tes fonctions?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

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);
Messages postés
43
Date d'inscription
mercredi 30 novembre 2005
Statut
Membre
Dernière intervention
5 décembre 2008

Merci Vecchio56 comme d'hab Réponse acceptée !
 
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
En passent, qu'elles était les fonctions avec lesquelle tu avais des problèmes?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
43
Date d'inscription
mercredi 30 novembre 2005
Statut
Membre
Dernière intervention
5 décembre 2008

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 @+
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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<!--