Espaces dans un chemin d'accès [Résolu]

ssmint 43 Messages postés mercredi 30 novembre 2005Date d'inscription 5 décembre 2008 Dernière intervention - 31 août 2006 à 12:28 - Dernière réponse : SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention
- 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.
@+
 
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 31 août 2006 à 14:21
3
Merci
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

Merci vecchio56 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de vecchio56
Meilleure réponse
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 31 août 2006 à 14:44
3
Merci
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

Merci vecchio56 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de vecchio56
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 31 août 2006 à 14:16
0
Merci
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
<!--
Commenter la réponse de SAKingdom
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 31 août 2006 à 14:30
0
Merci
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
Commenter la réponse de SAKingdom
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 31 août 2006 à 14:32
0
Merci
_wfopen pardon.

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

_____________________________________
Un éditeur de ressources gratuit pour Windows
Commenter la réponse de vecchio56
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 31 août 2006 à 14:41
0
Merci
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
Commenter la réponse de SAKingdom
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 31 août 2006 à 14:48
0
Merci
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
Commenter la réponse de SAKingdom
SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 31 août 2006 à 17:27
0
Merci
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
Commenter la réponse de SnOOpss
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 31 août 2006 à 17:30
0
Merci
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
Commenter la réponse de vecchio56
SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 31 août 2006 à 17:35
0
Merci
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é.
Commenter la réponse de SnOOpss
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 31 août 2006 à 17:44
0
Merci
Tu as deux arguments qui contiennent chacun la moitié du chemin, donc sur quoi appeler tes fonctions?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Commenter la réponse de vecchio56
SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 31 août 2006 à 17:58
0
Merci
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);
Commenter la réponse de SnOOpss
ssmint 43 Messages postés mercredi 30 novembre 2005Date d'inscription 5 décembre 2008 Dernière intervention - 3 sept. 2006 à 14:11
0
Merci
Merci Vecchio56 comme d'hab Réponse acceptée !
 
Commenter la réponse de ssmint
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 3 sept. 2006 à 14:18
0
Merci
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<!--
Commenter la réponse de SAKingdom
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 3 sept. 2006 à 18:08
0
Merci
En passent, qu'elles était les fonctions avec lesquelle tu avais des problèmes?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Commenter la réponse de SAKingdom
ssmint 43 Messages postés mercredi 30 novembre 2005Date d'inscription 5 décembre 2008 Dernière intervention - 6 sept. 2006 à 01:00
0
Merci
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 @+
Commenter la réponse de ssmint
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 6 sept. 2006 à 22:45
0
Merci
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<!--
Commenter la réponse de SAKingdom

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.