
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Pour autant que je sache, si aucune modification n'a été apportée au fichier à l'aide des fonctions de fichier (par exemple, FileWrite()), il n'est pas nécessaire de le fermer. La fonction FileOpen() crée simplement un nouveau fichier et cette opération ne nécessite pas la fermeture du fichier (la documentation de cette fonction ne précise pas non plus que le fichier doit être fermé après sa création).
Oy-lee ! Conteur https://docs.mql4.com/ru/files/fileopen
//--- la manière correcte de travailler dans le "sandbox" du fichier
ResetLastError() ;
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV) ;
si(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(ENUM_TIMEFRAMES(_Period)) ;
FileClose(filehandle) ;
Print("FileOpen OK") ;
}
autrePri
Oy-lee ! Conteur https://docs.mql4.com/ru/files/fileopen
Quelle est la contradiction avec ce que j'ai dit ?
J'ai dit...
Retag Konow:
Pour autant que je sache, si aucune modification n'a été apportée au fichier à l'aide des fonctions de fichier (par exemple, FileWrite()), il n'est pas nécessaire de le fermer. La fonction FileOpen() crée simplement un nouveau fichier et cette opération ne nécessite pas la fermeture du fichier (la documentation de cette fonction ne précise pas non plus que le fichier doit être fermé après sa création).
Mais dans votre exemple, la fonction FileWrite() est utilisée immédiatement après la création du fichier. Puis vous utilisez FileClose(filehandle) ;
De plus, dans le code du script ci-dessus, j'ai ajouté une fermeture explicite, mais cela n'a rien résolu...
Exactement comme ça. Lorsque j'essaie de supprimer un dossier qui contient déjà des sous-dossiers et des fichiers, je supprime d'abord les fichiers. Seuls les sous-dossiers restent. J'essaie de les nettoyer en utilisant FolderClean() puis j'appelle FolderDelete(). Cependant, le résultat est que les sous-dossiers qui étaient vides sont bien supprimés, mais s'il y avait plus de sous-dossiers à l'intérieur des sous-dossiers, ils ne sont pas supprimés. Ensuite, j'essaie de supprimer manuellement les dossiers du navigateur de fichiers dans MetaEditor, mais le terminal ne les supprime pas et fait apparaître cette fenêtre :
Je clique sur "Continuer", j'accepte les modifications, mais le dossier n'est toujours pas effacé. Après avoir complètement fermé et rouvert le terminal, les dossiers à effacer disparaissent d'eux-mêmes ou non, mais vous pouvez les effacer immédiatement et manuellement sans la fenêtre ci-dessus.
Des choses si étranges...
J'ai vu ce genre de chose plusieurs fois. J'ai compris qu'à un moment donné, le dossier Files, avec tous ses sous-dossiers et fichiers, obtient un attribut de lecture seule. Désélectionner ce drapeau manuellement n'aide pas. Mais redémarrer le terminal aide toujours. Je n'ai pas pu le faire jouer (je n'ai pas essayé), donc je ne l'ai pas signalé à SD.
L'erreur (5022) ne se produit que si vous définissez FILE_COMMON
Il efface le dossier mais ne le supprime pas.
Ce drapeau n'a pas besoin d'être activé, sinon le fichier sera recherché dans le dossier partagé, et l'erreur indique que le nom du répertoire est incorrect.
Chemin du fichier
"\\MQL4\\Files";
n'exige pas que ce drapeau soit activé. Donc tout est correct.
J'ai vu ce genre de chose se produire un certain nombre de fois. J'ai découvert qu'à un moment donné, le dossier Files, avec tous ses sous-dossiers et fichiers, obtient un attribut de lecture seule. Désélectionner ce drapeau manuellement n'aide pas. Mais redémarrer le terminal aide toujours. Je n'ai pas pu le faire jouer (je n'ai pas essayé), donc je ne l'ai pas signalé à SD.
Ce drapeau n'a pas besoin d'être activé, sinon le fichier sera recherché dans le dossier public et l'erreur indique que le nom du répertoire est incorrect.
Avec et sans FILE_COMMON, cela fonctionne (à l'origine, lors de la vérification, j'ai oublié de mettre ce drapeau dans le dernier if). Avec FILE_COMMON, il était sous-entendu qu'il était présent dans toutes les opérations.
Ce drapeau n'a pas besoin d'être activé, sinon le fichier sera recherché dans le dossier public, et l'erreur indique que le nom du répertoire est incorrect.
Le chemin d'accès au fichier
n'exige pas que ce drapeau soit activé. Donc tout est correct.
C'est étrange. J'ai remarqué les chemins du dossier MQL4 et j'ai recompilé le code en .ex4 et, étrangement, le code a fonctionné sans erreur. J'ai supprimé la fermeture du fichier et j'ai obtenu
Puis sans corrections je l'ai exécuté sur mt5 et bizarrement la mention du dossier MQL4 a été ignorée. Le dossier et le fichier ont été créés dans le dossier MQL5. A partir de là, tout est identique à celui de MT4. Un fichier non fermé n'est pas supprimé...
Tout ceci est étrange. J'ai remarqué les chemins du dossier MQL4 et j'ai recompilé le code en .ex4 et, étrangement, le code a fonctionné sans erreur. J'ai supprimé la fermeture du fichier et j'ai obtenu
Puis sans corrections je l'ai lancé sur mt5 et bizarrement la mention du dossier MQL4 a été ignorée. Le dossier et le fichier ont été créés dans le dossier MQL5. A partir de là, tout est identique à celui de MT4. Un fichier non fermé n'est pas supprimé...
Je veux dire, vous avez créé un conseiller expert à partir d'un script et essayé de l'exécuter ?
Mais je le ferme et le problème reste... Hélas...(