닫지 않은 파일이 포함된 폴더는 삭제되지 않습니다. - 페이지 5

 
Rashid Umarov :

OOP 대 절차적 프로그래밍 스레드에서 "내 모든 움직임을 기록했습니다"를 기억합니다 . 이 스레드에서 나는 당신이 신뢰할 수 없다는 것을 확인했습니다.

증거 및 세부 정보 없음 - 서비스 데스크에 편지를 보낼 필요가 없습니다.


폴더 삭제 문제는 여전히 해결되지 않았습니다. 스크립트는 작동하지만 아직 문제의 원인을 찾지 못했습니다.


다양한 옵션이 가능합니다. 이것은 내 잘못일 수도 있고 아닐 수도 있습니다. 문제를 해결하기 위해 그는 항상 필요한 정보를 제공할 준비가 되어 있습니다.


서비스 데스크에 대한 나의 호소는 결코 불만이 아닙니다.

 
Rashid Umarov :

OOP 대 절차적 프로그래밍 스레드에서 "내 모든 움직임을 기록했습니다"를 기억합니다 . 이 스레드에서 나는 당신이 믿을 수 없다는 것을 확인했습니다.

나는 당신이 말하는 움직임이 무엇인지, 왜 내가 믿을 수 없다고 생각하는지 이해하지 못합니다. 아마도 내가 이것에 대한 이유를 주었을 것입니다. 그러나 정확히 어디에서 언제인지 기억나지 않습니다.

어쨌든 저를 대하는 태도에 대해 솔직하게 말씀해주셔서 감사합니다. 모르는 것보다 아는 것이 낫습니다.

 

나는 당신이 정말로 이해하기를 바랍니다. 당신은 훌륭한 일을했습니다 나쁜 조언 - 서비스 데스크에 쓰지 않는 방법

 
Rashid Umarov :

나는 당신이 정말로 이해하기를 바랍니다. 당신은 훌륭한 일을했습니다 나쁜 조언 - 서비스 데스크에 쓰지 않는 방법


아아, 나는 이해하지 못했다. 이의 제기에서 나는 가능한 한 명확하고 구체적이려고 노력했습니다. 그는 세부 사항을보고하고 gif 파일, 주석이 포함 된 스크립트 코드를 가져 왔습니다. 그래서 내가 정확히 무엇을 잘못 했습니까?

 

정말 도움말을 읽고 코드를 올바르게 변경할 수 없습니까? 그러면 어떻게 다른 태도를 요구할 수 있습니까? 다음은 도움말의 코드입니다. 첨가제는 노란색으로 강조 표시됩니다.

 //+------------------------------------------------------------------+
//|                                                Test_FileOpen.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//--- неправильный способ открытия файла
   string terminal_data_path= TerminalInfoString ( TERMINAL_DATA_PATH );
   string filename=terminal_data_path+ "\\MQL5\\Files\\" + "fractals.csv" ;
   int filehandle= FileOpen (filename, FILE_WRITE | FILE_CSV );
   if (filehandle< 0 )
     {
       Print ( "Неудачная попытка открыть файл по абсолютному пути" );
       Print ( "Код ошибки " , GetLastError ());
     }
//--- правильный способ работы в "файловой песочнице"
   ResetLastError ();
   filehandle= FileOpen ( "fractals.csv" , FILE_WRITE | FILE_CSV );
   if (filehandle!= INVALID_HANDLE )
     {
       FileWrite (filehandle, TimeCurrent (), Symbol (), EnumToString ( _Period ));
       FileClose (filehandle);
       Print ( "FileOpen OK" );
     }
   else Print ( "Операция FileOpen неудачна, ошибка " , GetLastError ());

//--- еще один пример с созданием вложенной директории в MQL5\Files\
   string subfolder= "Research" ;
   filehandle= FileOpen (subfolder+ "\\fractals.txt" , FILE_WRITE | FILE_CSV );
   if (filehandle!= INVALID_HANDLE )
     {
       FileWrite (filehandle, TimeCurrent (), Symbol (), EnumToString ( _Period ));
       FileClose (filehandle);
       Print ( "Файл должен быть создан в папке " +terminal_data_path+ "\\" +subfolder);
     }
   else Print ( "Операция FileOpen неудачна, ошибка " , GetLastError ());
//---
   Print ( "Очищаем папку \\MQL5\\" ,subfolder);
   FolderClean (subfolder, 1 );

   Print ( "Удаляем папку \\MQL5\\" ,subfolder);
   if (! FolderDelete (subfolder, 1 ))
       PrintFormat ( "Ошибка! Не удалось удалить папку  \\MQL5\\" ,subfolder);
  }
//+------------------------------------------------------------------+
 
Rashid Umarov :

정말 도움말을 읽고 코드를 올바르게 변경할 수 없습니까? 그러면 어떻게 다른 태도를 요구할 수 있습니까? 다음은 도움말의 코드입니다. 첨가제는 노란색으로 강조 표시됩니다.

내 사람에 대한 태도가 코드에서 실수를 했는지 여부에 따라 달라지면 여기에 뭔가 잘못되어 있지 않을까 걱정됩니다...)))

나는 아직도 당신의 주장을 잘 이해하지 못합니다.

변경한 코드를 포럼에 두 번 이상 게시했습니다. 내 유일한 실수는 명시적 파일 닫기를 추가한 후 스크립트를 다시 저장하는 것을 잊어버렸기 때문에 수정된 스크립트에서 문제가 해결되었음을 보지 못했다는 것입니다. 그러나 어떤 경우에도 문서는 파일을 만든 후 닫아야 한다고 명시적으로 말하지 않습니다.

이 외에도 내가 말했듯이 폴더를 지우는 문제(파일이 아님)는 여전히 남아 있습니다. 폴더에 더 이상 파일이 없지만 FolderClean 기능으로 삭제 하면 오류가 발생합니다.

그 이유는 아직 명확하지 않습니다.

그래서 내가 서비스 데스크로 눈을 돌린 이유가있을 수 있습니다.

오랜 시간 내 문제를 봐주셔서 감사합니다.

 
Реter Konow :
고맙습니다. 이 문제를 겪고 있는 유일한 사람이 아니어서 다행입니다. 나는 이 문제를 해결하기 위해 "내 코를 피했다"(이것이 없으면 나는 사용자 파일 탐색기를 완성할 수 없다). 나는 서비스 데스크에 편지를 썼다. 하지만 혹시나 해서 여기에 올립니다. 헛되지 않은 것으로 밝혀졌습니다.)
fxsaber :

나는 그런 것들을 여러 번 보았다. 어느 시점에서 모든 하위 폴더와 파일이 있는 Files 폴더가 읽기 전용 속성을 갖는다는 것을 알았습니다. 이 플래그를 손으로 제거해도 도움이 되지 않습니다. 그러나 터미널을 다시 시작하면 항상 도움이 됩니다. 재생이 안되어서(안해봤음) SD에 신고하지 않았습니다.

나는 가입한다. 2014년 초부터 16밀리초 단위로 연속적으로 이 폴더에 파일을 생성하려는 9번의 시도에서 OS 오류 "32 공유 위반"을 생성하는 매우 드문 충돌을 경험하기 시작했습니다. 무슨 일이 일어나고 있는지 이해할 수 없었습니다. 그 당시 MQ에서 발생한 "파일 작업 기능의 근본적인 업데이트"에 대해 죄를 지었습니다. 저도 재현할 수 없지만, 바로 지금, 20시 12분 42초에 그런 장애가 발생했습니다. 순식간에 몇 초가 지나고 이 폴더에 있는 파일에 들어가서 제대로 편집하고 저장했습니다. 실패는 잡히지 않습니다.

그 전에는 5년 동안 한 달에 한두 번 이런 실패가 나왔다가 2014년 2월부터 매주 의무화돼 몇 번인지는 세지 않았다. 동시에 발사되는 터미널의 수는 40-50에서 35로 감소했지만.

 
Vladimir :

나는 가입한다. 2014년 초부터 16밀리초 단위로 연속적으로 이 폴더에 파일을 생성하려는 9번의 시도에서 OS 오류 "32 공유 위반"을 생성하는 매우 드문 충돌을 경험하기 시작했습니다. 무슨 일이 일어나고 있는지 이해할 수 없었습니다. 그 당시 MQ에서 발생한 "파일 작업 기능의 근본적인 업데이트"에 대해 죄를 지었습니다. 저도 재현할 수 없지만, 바로 지금, 20시 12분 42초에 그런 장애가 발생했습니다. 순식간에 몇 초가 지나고 이 폴더에 있는 파일에 들어가서 제대로 편집하고 저장했습니다. 실패는 잡히지 않습니다.

그 전에는 5년 동안 한 달에 한두 번 이런 실패가 나왔다가 2014년 2월부터 매주 의무화돼 몇 번인지는 세지 않았다. 동시에 발사되는 터미널의 수는 40-50에서 35로 감소했지만.

나에게 모든 파일은 명시적으로 닫지 않아도 지워집니다. 내가 만들지 않았기 때문에 지워지고 그 이전에는 Files 폴더 안에 있었습니다.

사실 파일을 지우려면 핸들이 필요합니다. 그러나 이 파일을 생성하지 않고 Files 폴더에만 배치한 경우 핸들을 가져올 수 없으므로 FileClose() 함수로 파일을 닫을 수 없습니다.

동시에 우리는 여전히 그것을 복사하거나 지울 수 있습니다. 그러나 그 이후의 폴더는 프로그래밍 방식이나 수동으로 삭제할 수 없습니다. 터미널을 다시 시작한 후에만 수동으로.

나중에 나는 예시적인 예를 통해 문제를 더 명확하게 재현하려고 노력할 것입니다.

 
Реter Konow :

나에게 모든 파일은 명시적으로 닫지 않아도 지워집니다. 내가 만들지 않았기 때문에 지워지고 그 이전에는 Files 폴더 안에 있었습니다.

사실 파일을 지우려면 핸들이 필요합니다. 그러나 이 파일을 생성하지 않고 Files 폴더에만 배치한 경우 핸들을 가져올 수 없으므로 FileClose() 함수로 파일을 닫을 수 없습니다.

동시에 우리는 여전히 그것을 복사하거나 지울 수 있습니다. 그러나 그 이후의 폴더는 프로그래밍 방식이나 수동으로 삭제할 수 없습니다. 터미널을 다시 시작한 후에만 수동으로.

나중에 나는 예시적인 예를 통해 문제를 더 명확하게 재현하려고 노력할 것입니다.

아마도 이것이 문제의 핵심일 것입니다.

사용자의 파일 탐색기에서 폴더 이름을 변경할 때 FolderRename() 함수가 존재하지 않아 사용할 수 없습니다.

대신 모든 파일과 폴더를 사용자 지정 이름으로 새 폴더에 복사하고 원본 폴더(이름을 변경함)에서 원본 파일과 폴더를 삭제합니다. 결과적으로 먼저 원본 폴더에서 모든 파일을 지우고(새 폴더에 복사한 후) FolderClean() 함수를 사용하여 이미 비어 있는 원본 폴더의 나머지 폴더 계층 구조를 삭제하려고 합니다. 여기서 오류가 발생합니다. 일부 폴더는 지워지지만 원래 폴더처럼 한두 개만 남습니다. 수동으로 지우려고 하면 실패합니다. 터미널을 다시 시작하는 것만으로도 도움이 됩니다.

 
Реter Konow :

아마도 이것이 문제의 핵심일 것입니다.

사용자의 파일 탐색기에서 폴더 이름을 변경할 때 FolderRename() 함수가 존재하지 않아 사용할 수 없습니다.

대신 모든 파일과 폴더를 사용자 지정 이름으로 새 폴더에 복사하고 원본 폴더(이름을 변경함)에서 원본 파일과 폴더를 삭제합니다. 결과적으로, 먼저 원본 폴더에서 모든 파일을 지우고(새 폴더에 복사한 후) FolderClean() 함수를 사용하여 이미 비어 있는 원본 폴더의 나머지 폴더 계층 구조를 삭제하려고 합니다. 여기서 오류가 발생합니다. 일부 폴더는 지워지지만 원래 폴더처럼 한두 개만 남습니다. 수동으로 지우려고 하면 실패합니다. 터미널을 다시 시작하는 것만으로도 도움이 됩니다.


흥미진진한 "픽션" 장르로 글을 쓰는 한 계속하십시오. 40페이지까지는 "기술 문학" 장르로 전환하시길 바랍니다.