Una cartella non viene cancellata se contiene file non chiusi - pagina 3

 
Реter Konow:
Per quanto ne so, se non sono state apportate modifiche al file utilizzando funzioni di file (ad esempio FileWrite()), non c'è bisogno di chiuderlo. La funzione FileOpen() crea semplicemente un nuovo file e questa operazione non richiede la chiusura del file (la documentazione di questa funzione, inoltre, non dice che il file deve essere chiuso dopo la creazione).

Oy-lee! Cantastorie https://docs.mql4.com/ru/files/fileopen


//--- il modo corretto di lavorare nella "sandbox dei file"
ResetLastError();
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(ENUM_TIMEFRAMES(_Period));
FileClose(filehandle);
Stampa("FileOpen OK");
}
altroPri

FileOpen - Файловые операции - Справочник MQL4
FileOpen - Файловые операции - Справочник MQL4
  • docs.mql4.com
FileOpen - Файловые операции - Справочник MQL4
 
Rashid Umarov:

Oy-lee! Cantastorie https://docs.mql4.com/ru/files/fileopen


Qual è la contraddizione con quello che ho detto?

Ho detto, -

Retag Konow:
Per quanto ne so, se non sono state apportate modifiche al file utilizzando funzioni di file (ad esempio FileWrite()), non c'è bisogno di chiuderlo. La funzione FileOpen() crea semplicemente un nuovo file e questa operazione non richiede la chiusura del file (anche la documentazione di questa funzione non dice che il file deve essere chiuso dopo la creazione).


Ma nel tuo esempio la funzione FileWrite() è usata immediatamente dopo la creazione del file. E poi usate FileClose(filehandle);


Inoltre, nel codice dello script di cui sopra ho aggiunto una chiusura esplicita, ma questo non ha risolto nulla...

 
Реter Konow:

Esattamente così. Quando cerco di eliminare una cartella che contiene già sottocartelle e file, elimino prima i file. Rimangono solo le sottocartelle. Provo a pulirli usando FolderClean() e poi chiamo FolderDelete(). Tuttavia, il risultato è che quelle sottocartelle che erano vuote sono ben cancellate, ma se c'erano più sottocartelle all'interno delle sottocartelle non vengono cancellate. Dopo di che, provo a rimuovere manualmente le cartelle dal navigatore di file in MetaEditor, ma il terminale non le rimuove e fa apparire questa finestra:

Clicco su "Continua", accetto le modifiche, ma la cartella non viene ancora cancellata. Dopo aver chiuso completamente e riaperto il terminale, le cartelle che avrebbero dovuto essere cancellate scompaiono da sole oppure no, ma è possibile cancellarle immediatamente e manualmente senza la finestra di cui sopra.

Che cose strane...

Ho visto questo tipo di cose molte volte. Ho capito che a un certo punto la cartella Files con tutte le sue sottocartelle e i suoi file ottiene l'attributo di sola lettura. Deselezionare questa bandiera manualmente non aiuta. Ma riavviare il terminale aiuta sempre. Non sono riuscito a farlo suonare (non ci ho provato), quindi non l'ho segnalato alla SD.

 
A100:

L'errore (5022) si verifica solo se si imposta FILE_COMMON

Cancella la cartella ma non la cancella

Questo flag non ha bisogno di essere impostato, altrimenti il file verrà cercato nella cartella condivisa, e l'errore dice che il nome della directory è sbagliato.

Percorso del file

"\\MQL4\\Files";

non richiede che questo flag sia impostato. Quindi tutto è corretto.

 
fxsaber:

Ho visto questo tipo di cose accadere diverse volte. Ho scoperto che a un certo punto la cartella Files con tutte le sottocartelle e i file ottiene l'attributo di sola lettura. Deselezionare questa bandiera manualmente non aiuta. Ma riavviare il terminale aiuta sempre. Non sono riuscito a farlo suonare (non ci ho provato), quindi non l'ho segnalato alla SD.

Grazie. Sono contento di non essere l'unico ad affrontare questo problema. Ho bisogno di risolvere questo problema (non posso finire di usare ilnavigatore di file senza di esso). Ho scritto a servicedeck. Ma scrivo anche qui, per sicurezza. Non si è rivelato inutile).
 
Реter Konow:

Questo flag non ha bisogno di essere impostato, altrimenti il file verrà cercato nella cartella pubblica e l'errore dice che il nome della directory è sbagliato.

Sia con che senza FILE_COMMON - funziona (originariamente quando ho controllato ho dimenticato di mettere questo flag nell'ultimo if). Con FILE_COMMON era implicito che fosse presente in tutte le operazioni

 
Реter Konow:

Questo flag non ha bisogno di essere impostato, altrimenti il file verrà cercato nella cartella pubblica, e l'errore dice che il nome della directory è sbagliato.

Il percorso del file

non richiede che questo flag sia impostato. Quindi tutto è corretto.

Questo è strano. Ho notato i percorsi della cartella MQL4 e ho ricompilato il codice in .ex4 e stranamente il codice ha funzionato senza errori. Ho rimosso la chiusura del file e ho ottenuto

2017.08.28 17:36:18.525 Demo_FolderDelete EURUSD.e,H4: Не удалось удалить папку nonempty. Код ошибки=5025
2017.08.28 17:36:16.985 Demo_FolderDelete EURUSD.e,H4: Не удалось очистить папку nonempty. Код ошибки=5026

Poi senza correzioni l'ho eseguito su mt5 e stranamente la menzione della cartella MQL4 è stata ignorata. La cartella e il file sono stati creati nella cartella MQL5. Da qui tutto è come in MT4. Un file non chiuso non viene cancellato...

2017.08.28 17:50:45.328 Demo_FolderDelete (CADJPY,H4)   Не удалось очистить папку nonempty. Код ошибки=5025
2017.08.28 17:50:47.958 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки=5024
 
Il servo ha risposto. Hanno detto che il file deve essere chiuso dopo la creazione. Ma lo chiudo e il problema rimane... Ahimè...(
 
Alexey Viktorov:

Tutto questo è strano. Ho notato i percorsi della cartella MQL4 e ho ricompilato il codice in .ex4 e stranamente il codice ha funzionato senza errori. Ha rimosso la chiusura del file e ha ottenuto

Poi senza correzioni l'ho eseguito su mt5 e stranamente la menzione della cartella MQL4 è stata ignorata. La cartella e il file sono stati creati nella cartella MQL5. Da qui tutto è come in MT4. Un file non chiuso non viene cancellato...

Voglio dire, hai creato un Expert Advisor da uno script e hai provato ad eseguirlo?

 
Реter Konow:
Ma lo chiudo e il problema rimane... Ahimè...(
E prova FILE_COMMON ovunque
Motivazione: