2014-06-20 1 views
0

Je code dans Metatrader et utilise ShellExecuteW pour ouvrir un navigateur local avec un fichier html écrit dans Metatrader.Comment résoudre un problème de nom de répertoire partagé dans ShellExecuteW

Tout fonctionne parfaitement, sauf si le répertoire dans lequel la plate-forme Metatrader est installée est un répertoire de noms divisés. c'est-à-dire: Mon FX et pas MyFx.

S'il s'agit de MyFx, il n'y a aucun problème et le navigateur s'ouvre comme prévu montrant le fichier html. Lorsque le nom de split est utilisé, il essayera d'ouvrir par exemple: file: /// G:/My et ne verra jamais le reste de l'adresse.

Le code pertinent tel qu'il se présente est ci-dessous. L'utilisateur met seulement dans le nom du fichier par exemple: VisualizeV1 qui est la raison pour laquelle il y a la concaténation etc. mais ce n'est pas le problème.

string newtpath = TerminalPath() ; 
// outputs G:\MyFX 

string MT4_file_folder =newtpath+"/MQL4/Files/"; 
// outputs G:\MyFX/MQL4/Files/ 

filesuffix=StringConcatenate("_",Symbol(),"_",TimeFrameStr,"_",fname_rpt_date); 
// Outputs BrookyVisualize/VisualizeV1___EURUSD_H1__yr2014_mth6_dy19_hr23 

fname=StringConcatenate(filename,filesuffix,".html"); 
// Outputs BrookyVisualize/VisualizeV1___EURUSD_H1__yr2014_mth6_dy19_hr23.html 

file2find=StringConcatenate("file://",MT4_file_folder,visualize_folder,fname); 
// Outputs G:\MyFX/MQL4/Files/BrookyVisualize/VisualizeV1___EURUSD_H1__yr2014_mth6_dy19_hr23.html 

ShellExecuteW(0,NULL,Your_Internet_Browser,file2find,NULL,5); 
// Opens firefox at address file:///G:/MyFX/MQL4/Files/BrookyVisualize/VisualizeV1___EURUSD_H1__yr2014_mth6_dy19_hr23.html 

J'ai essayé de remplacer les caractères manquants dans le répertoire avec & # 160 et & nbsp. Aussi joker * et barres obliques.

Si les remplacements sont insérés, l'adresse est générée et ouvre dans le navigateur comme par exemple: file: /// G:/Mon & nbsp & nbspFX/MQL4/...... qui donne alors un fichier non erreur trouvée.

Est-ce que quelqu'un pourrait me dire ce que je devrais passer dans ShellExecuteW sur ce chemin pour résoudre ce problème.

Merci.

Répondre

0

Le classer.

J'ai remplacé l'espace par% 20 et tout va bien.

Le code ci-dessous qui fonctionne pour moi maintenant.

string tpath = TerminalPath() ; 
int replaced; 
string newtpath=""; 
replaced = StringReplace(tpath," ","%20"); 
newtpath = tpath; 

MT4_file_folder =newtpath+"/MQL4/Files/"; 
+0

La raison réside dans la différence entre URLEncoding et HTML Encoding. Par exemple,   est le codage HTML pour tandis que dans le codage d'URL, il doit être% 20. Vous devez utiliser l'encodage correct (encodage d'URL). –

Questions connexes