2017-10-02 7 views
0

J'utilise GetFullPathName et WinExec.Comment puis-je changer le caractère dans une chaîne pour le caractère /?

Pour WinExec pour appeler mon programme externe correctement, j'ai besoin d'un chemin d'accès complet au programme.

GetFullPathName() renvoie les éléments suivants ...

C:\job\curr01\help\hlp.exe 

Lorsque j'utilise ce chemin dans WinExec, rien ne se passe. En effet, WinExec attend ...

C:/job/curr01/help/hlp.exe 

Je sais cela parce que si je coder en dur le string « C: /job/curr01/help/hlp.exe » dans WinExec(), il fonctionne très bien et ouvre le programme.

Ma question est comment puis-je analyser ma chaîne pour '\' et les remplacer par '/'?

'\' je un caractère spécial et ce qui suit ne fonctionne pas ...

ci-dessous helpPath = 'C: \ travail \ curr01 \ help \ hlp.exe'

for (char* p = helpPath; p = strchr(p, "\"); ++p) { 
    *p = "/"; 
} 

C a un problème avec "\" parce que c'est un caractère spécial. J'ai essayé "" \ "" et "//" mais rien ne semble fonctionner.

+0

c'est le contraire de ce que je veux bien. Vérification de \ ad remplacement avec/ – user3622460

Répondre

3

Essayez ceci:

if (*p == '\\') //Escape the character '\' 
    *p = '/'; 
+0

Awesome fonctionne très bien. N'ouvre toujours pas le fichier correctement car il ajoute/Program/Bin dans le chemin après curr01 maintenant, mais c'est un autre problème haha. Merci – user3622460

+0

Nice, pouvez-vous valider la réponse pour régler le message comme résolu? Bonne chance pour votre problème, si vous ne pouvez pas le résoudre, postez une question;) – YaatSuka

0

Je ne pense pas WinExec attend vraiment "/" comme séparateur de répertoire. Je crois que le séparateur "préféré" dans les appels API Win32 est toujours un "\". La prise en charge du "/" a été ajoutée à certaines fonctions de l'API Win32 il y a quelque temps, soit pour simplifier la vie des personnes familiarisées avec Windows, soit pour éviter les problèmes causés par l'utilisation de "\" dans les chaînes de caractères C . Ou peut-être pour une autre raison que seul Microsoft comprend. Quoi qu'il en soit, vous devriez corriger l'effet d'échappement de "\", probablement en le doublant: c:\\path\\to\\my\\exe. C'est une manière plus Windows-y de résoudre le problème que d'utiliser des barres obliques, qui (IIRC) fonctionneront dans certains endroits mais pas dans d'autres.

J'apprécie que ce n'est pas vraiment une nouvelle réponse, mais je note que vous avez posé d'autres questions où vous semblez avoir des problèmes similaires avec les chemins d'accès Windows.