Não apagar uma pasta se ela contiver arquivos não fechados - página 3

 
Реter Konow:
Tanto quanto sei, se não foram feitas mudanças no arquivo usando funções de arquivo (por exemplo, FileWrite()), não há necessidade de fechá-lo. A função FileOpen() simplesmente cria um novo arquivo e esta operação não requer o fechamento do arquivo (a documentação para esta função, também não diz que o arquivo precisa ser fechado após a criação).

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


//--- a maneira correta de trabalhar na "caixa de areia de arquivo".
ResetLastError();
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
if(filehandle!=INVALID_HANDLE)
{
FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(ENUM_TIMEFRAMES(_Periodo));
FileClose(filehandle);
Imprimir("FileOpen OK");
}
senãoPri

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

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


Qual é a contradição com o que eu disse?

Eu disse, -

Retag Konow:
Tanto quanto sei, se não foram feitas mudanças no arquivo usando funções de arquivo (por exemplo, FileWrite()), não há necessidade de fechá-lo. A função FileOpen() apenas cria um novo arquivo e esta operação não requer o fechamento do arquivo (a documentação para esta função também não diz que o arquivo precisa ser fechado após a criação).


Mas em seu exemplo, a função FileWrite() é utilizada imediatamente após a criação do arquivo. E então você usa FileClose(filehandle);


Além disso, no código do script acima, acrescentei um encerramento explícito, mas isso não resolveu nada...

 
Реter Konow:

Exatamente como isto. Quando tento apagar uma pasta que já contém subpastas e arquivos, eu apago os arquivos primeiro. Restam apenas as subpastas. Eu tento limpá-los usando FolderClean() e depois chamo FolderDelete(). Entretanto, o resultado é que aquelas subpastas que estavam vazias são bem apagadas, mas se houvesse mais subpastas dentro das subpastas, elas não são apagadas. Depois disso, tento remover as pastas do navegador de arquivos no MetaEditor manualmente, mas o terminal não as remove e abre esta janela:

Eu clico em "Continuar", concordo com as mudanças, mas a pasta ainda não foi apagada. Após fechar e reabrir completamente o terminal, as pastas que deveriam ter sido apagadas desaparecem por si mesmas ou não, mas você pode apagá-las imediatamente e manualmente sem a janela acima.

Coisas tão estranhas...

Eu já vi este tipo de coisa muitas vezes. Descobri que em algum momento a pasta de Arquivos com todas as suas subpastas e arquivos recebe o atributo de somente leitura. Desmarcar esta bandeira manualmente não ajuda. Mas o reinício do terminal sempre ajuda. Não conseguiu fazer com que ele jogasse (não tentou), então não informou à SD.

 
A100:

O erro (5022) só ocorre se você definir FILE_COMMON

Limpa a pasta, mas não a apaga

Esta bandeira não precisa ser definida, caso contrário o arquivo será pesquisado na pasta compartilhada, e o erro diz que o nome do diretório está errado.

Caminho do arquivo

"\\MQL4\\Files";

não exige que esta bandeira seja hasteada. Portanto, tudo está correto.

 
fxsaber:

Eu já vi este tipo de coisa acontecer várias vezes. Descobri que em algum momento a pasta Arquivos com todas as subpastas e arquivos recebe atributo somente leitura. Desmarcar esta bandeira manualmente não ajuda. Mas o reinício do terminal sempre ajuda. Não conseguiu fazer com que ele jogasse (não tentou), então não informou à SD.

Obrigado. Ainda bem que eu não sou o único que enfrenta este problema. Preciso resolver este problema (não posso terminar de usar onavegador de arquivos sem ele). Eu escrevi para o servicedeck. Mas também estou escrevendo aqui, por via das dúvidas. Não foi em vão).
 
Реter Konow:

Esta bandeira não precisa ser definida, caso contrário o arquivo será pesquisado na pasta compartilhada e o erro diz que o nome do diretório está errado.

Tanto com como sem FILE_COMMON - funciona (originalmente ao verificar, esqueci de colocar esta bandeira no último "se"). Com o FILE_COMMON ficou implícito que ele está presente em todas as operações

 
Реter Konow:

Esta bandeira não precisa ser colocada, caso contrário o arquivo será pesquisado na pasta pública, e o erro diz que o nome do diretório está errado.

O caminho para o arquivo

não exige que esta bandeira seja hasteada. Portanto, tudo está correto.

Isso tudo é estranho. Notei os caminhos da pasta MQL4 e recompilei o código em .ex4 e, estranhamente, o código funcionou sem erros. Eu removi o fechamento do arquivo e recebi

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

Então, sem correções, eu o executei no mt5 e, estranhamente, a menção da pasta MQL4 foi ignorada. A pasta e o arquivo foram criados na pasta MQL5. A partir daqui tudo é igual ao MT4. Um arquivo não fechado não é excluído...

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
 
O pessoal de serviço respondeu. Eles disseram que o arquivo tem que ser fechado após a criação. Mas eu o fecho e o problema permanece... Ai de mim...(
 
Alexey Viktorov:

Isso tudo é estranho. Notei os caminhos da pasta MQL4 e recompilei o código em .ex4 e, estranhamente, o código funcionou sem erros. Removido o fechamento do arquivo e obtido

Então, sem correções, eu o executei no mt5 e, estranhamente, a menção da pasta MQL4 foi ignorada. A pasta e o arquivo foram criados na pasta MQL5. A partir daqui tudo é igual ao MT4. Um arquivo não fechado não é excluído...

Quero dizer, você fez um Expert Advisor a partir de um roteiro e tentou executá-lo?

 
Реter Konow:
Mas eu o fecho e o problema permanece... Ai de mim...(
E tente FILE_COMMON em todos os lugares
Razão: