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

 

내일 나는 이 문제를 완전히 재현하는 스크립트를 만들려고 노력할 것입니다.

사람들이 내가 여기서 "픽션"을 하고 있다고 말하지 않도록.)

A BIG 기꺼이 도와주고 솔루션을 도와주신 모든 분들께 감사드립니다. ))

 

이러한 부동 오류가 있었습니다(순서가 설명되고 라이브러리 .ex5 파일이 첨부됨). 이것을 문서화하는 것은 어렵습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

A100 , 2016.08.04 00:05

전문가가 파일을 여는 동안 오류가 발생했습니다. 그리고 예를 들어

1. "관련이 없는 일부 코드" 제거(아래 참조)

2. 또는 제거 ::Sleep(1000)

그러면 오류가 발생하지 않습니다

 //Test.mq5
#import "Test001.ex5"
         string f( string file );
#import
string __Period() { return StringSubstr ( EnumToString (( ENUM_TIMEFRAMES ) Period ()), 7 ); }
void OnInit ()
{
         Print ( Symbol (), "," , __Period(), ", результат=" , f( "test.txt" ));
}

시퀀싱:

1. 새 프로필 만들기(예: "테스트")

2. Test.ex5 전문가를 두 차트에 연결하여 두 개의 새 차트를 엽니다(그림 참조).

4. 다른 기존 프로필 선택

5. 프로필 "테스트" 선택

결과:

Test001.mq5는 다음과 같습니다.

 //Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        :: ResetLastError ();
         int hFile = :: FileOpen ( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
         if ( hFile == INVALID_HANDLE )
                 return :: StringFormat ( "Error(%d): Не был открыт файл: %s" , :: GetLastError (), file );
        :: Sleep ( 1000 );
        :: FileClose ( hFile );
         return "OK" ;
}

나는 거기에 첨부 된 라이브러리 파일로 지금 시도했습니다 : 결과는 동일합니다 (테스트 파일은 두 전문가가 별도로 열었고 동시에 전문가 중 한 명이 오류를보고 함)
2017.08.28 23:40:43.623 테스트 (EURUSD,M15) EURUSD,M15, 결과=OK
2017.08.28 23:40:52.389 테스트 (GBPUSD,M15) GBPUSD,M15, 결과=OK

2017.08.28 23:41:14.387 테스트 (GBPUSD,M15) GBPUSD,M15, result=Error(5004): 파일이 열리지 않음: test.txt
2017.08.28 23:41:15.484 테스트 (EURUSD,M15) EURUSD,M15, 결과=OK


 

번호 # 1530548에서 응용 프로그램을 찾았지만 설명이 없으면 이미 수정되었을 수 있습니다. 그렇지 않은 경우 다시 검토하십시오.

 

Реter Konow :

내 응용 프로그램(파일 탐색기)에서 파일 을 열어 다른 폴더에 덮어씁니다.

읽기 위해 파일을 파일 핸들을 얻습니다 .

피터 코노우 :

덮어쓴 후 파일을 닫아야 하지만 처리할 수 없고 파일을 지울 수 없습니다.

다른 파일에 쓰기 위해서는 다른 파일의 핸들이 필요하므로 다른 변수에 저장하는 것이 좋습니다. 새 파일에 쓴 후 두 파일의 핸들은 두 변수에 저장되며 두 파일은 이 핸들을 사용하여 닫힙니다.

피터 코노우 :

파일이 언제 생성되었는지, 누구에 의해 생성되었는지 아무도 모르기 때문에 핸들이 없습니다.

파일이 언제 누구에 의해 생성되었는지 알 수 없는 경우 이 파일이 어떤 응용 프로그램에도 사용되지 않을 가능성이 매우 높습니다. 어떤 목적으로 이 파일을 여는 경우 이미 FileOpen 함수에서 핸들을 받은 것이므로 폴더를 지우기 전에 닫아야 합니다.

피터 코노우 :

이 경우 파일은 Files 폴더 안에 존재하며 다른 폴더에 복사 후 삭제할 수 있습니다.

사용 가능한 하나의 mql 프로그램에서 파일을 복사할 때 파일 핸들은 절대 필요하지 않습니다.

피터 코노우 :

그러나 복사 후에는 이 파일을 닫을 수 없습니다. 핸들이 없습니다.

파일을 복사한 후에는 이 파일이 열리지 않으며 닫을 필요가 없습니다.

피터 코노우 :

이것이 아마도 삭제된 파일이 있는 FolderClean() 폴더의 추가 지우기가 작동하지 않는 이유일 것입니다.

절대적인 착각.

피터 코노우 :

질문: MQL 프로그램에서 이 파일의 핸들을 얻는 방법은 무엇입니까?

위에서 이 질문은 의미가 없습니다. 파일 핸들은 FileTell 및 FileSeek 파일 포인터의 위치를 결정\할당하기 위해 파일을 열 때만 얻습니다. 읽기 또는 쓰기 위치에서 데이터를 강제로 FileFlush 디스크로 플러시하고 물론 닫습니다. 다른 응용 프로그램에서 작업할 수 있도록 파일을 해제합니다.


아주 우연히, 나는 당신의 문제가 무엇인지 발견했습니다:

실험하는 동안 탐색기나 다른 파일 관리자에서 폴더를 열어 파일 생성 및 삭제를 모니터링합니다. 그리고 파일을 삭제한 후에도 폴더는 계속 점유되어 삭제할 수 없습니다. 결과적으로 우리는

 2017.08 . 29 09 : 42 : 15.657 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки= 5024

그러나 폴더 삭제 시도가 실패한 후에도이 폴더가 계속 점유되어 있다는 사실은 슬프게도 사실입니다. 이제 이에 대해 SD에 대한 애플리케이션이 생성됩니다.

추신; 아아, 나도 실험 중에 망쳤어. 파일을 쓴 후 디스크에 데이터를 버리고 메모장으로 열려고 했지만 응답이 ... (fig) 열기 시도를 취소하는 것을 잊어 버렸고 그것이 폴더를 유지하고 허용하지 않았습니다. 삭제됩니다.

요약: mql 파일 작업에 문제가 없습니다.

 

Alexey Viktorov :

아주 우연히, 나는 당신의 문제가 무엇인지 발견했습니다:

실험하는 동안 탐색기나 다른 파일 관리자에서 폴더를 열어 파일 생성 및 삭제를 모니터링합니다. 그리고 파일을 삭제한 후에도 폴더는 계속 점유되어 삭제할 수 없습니다. 결과적으로 우리는

 2017.08 . 29 09 : 42 : 15.657 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки= 5024

그러나 폴더 삭제 시도가 실패한 후에도이 폴더가 계속 점유되어 있다는 사실은 슬프게도 사실입니다. 이제 이에 대해 SD에 대한 애플리케이션이 생성됩니다.

나는 완전히 다른 상황에서이 동작을 우연히 발견했습니다. 또한 삭제 폴더를 열어 두어 프로그램/스크립트/svn 등이 생성됩니다. 이 폴더를 삭제할 수 없습니다.

그리고 이 폴더를 수동으로 철거함으로써 항상 같은 방식으로 처리됩니다. 따라서 터미널이나 편집기 문제가 아닙니다.

 
Rashid Umarov :

나는 완전히 다른 상황에서이 동작을 우연히 발견했습니다. 또한 삭제 폴더를 열어 두어 프로그램/스크립트/svn 등이 생성됩니다. 이 폴더를 삭제할 수 없습니다.

그리고 이 폴더를 수동으로 철거함으로써 항상 같은 방식으로 처리됩니다. 따라서 터미널이나 편집기 문제가 아닙니다.

나는 조금 후에 내 게시물을 업데이트했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

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

알렉세이 빅토 로프 , 2017.08.29 08:55


추신; 아아, 나도 실험 중에 망쳤어. 파일을 쓴 후 디스크에 데이터를 버리고 메모장으로 열려고 했지만 응답이 ... (fig) 열기 시도를 취소하는 것을 잊어 버렸고 그것이 폴더를 유지하고 허용하지 않았습니다. 삭제됩니다.

요약: mql 파일 작업에는 문제가 없습니다.


이 추가 없이 내 메시지를 인용한 것이 이상합니다.

 
Alexey Viktorov :

나는 조금 후에 내 게시물을 업데이트했습니다.


이 추가 없이 내 메시지를 인용한 것이 이상합니다.

SD의 응답을 받을 준비가 되었습니다.

 
Rashid Umarov :

SD의 응답을 받을 준비가 되었습니다.

그렇다면 문제의 원인을 이해한다면 왜 SD로 온갖 말도 안되는 소리를 쓰는 걸까요? 나는 단지 내가 쓰기를 거부했다고 큰 소리로 말하지 않았습니다 ... 어쨌든 모두가 그것을 이해한다고 생각했습니다.
 
Rashid Umarov :

나는 완전히 다른 상황에서이 동작을 우연히 발견했습니다. 또한 삭제 폴더를 열어 두어 프로그램/스크립트/svn 등이 생성됩니다. 이 폴더를 삭제할 수 없습니다.

그리고 이 폴더를 수동으로 철거함으로써 항상 같은 방식으로 처리됩니다. 따라서 터미널이나 편집기 문제가 아닙니다.

그러나 파일이 아닌 파일 관리자에서 폴더 를 여는 사실은 mql을 통한 삭제에 영향을 미치지 않습니다.

 
Alexey Viktorov :

1. 읽기 위해 파일을 파일 핸들을 얻습니다 .

2. 다른 파일에 쓰기 위해서는 다른 파일의 핸들이 필요하므로 다른 변수에 저장하는 것이 좋습니다. 새 파일에 쓴 후 두 파일의 핸들은 두 변수에 저장되며 두 파일은 이 핸들을 사용하여 닫힙니다.

3. 파일이 언제, 누구에 의해 생성되었는지 알 수 없는 경우 이 파일은 어떤 응용 프로그램에서도 사용되지 않을 가능성이 매우 높습니다. 어떤 목적으로 이 파일을 여는 경우 이미 FileOpen 함수에서 핸들을 받은 것이므로 폴더를 지우기 전에 닫아야 합니다.

4. 사용 가능한 하나의 mql 프로그램에서 파일을 복사할 때 파일 핸들은 절대 필요하지 않습니다.

5. 파일을 복사한 후 이 파일은 열리지 않으며 닫을 필요가 없습니다.


1. 핸들은 FileClose 함수에만 필요합니다. 파일을 열지 않습니다. 그것은 나보다 먼저 창조되었다. 저는 그냥 복사해서 붙여넣습니다. 손잡이가 없어서 닫을 수가 없어요.

2. 복사(FileCopy)의 경우, 이동(FileMove)의 경우 파일 핸들이 필요하지 않습니다. 문서를 보십시오.

3. 이전에 누군가가 FileOpen 함수로 만든 파일을 열면 핸들을 얻지 못합니다. 내가 어떤 핸들을 받을지는 전혀 알려져 있지 않습니다. 그것은 그의 것일 수도 있고 완전히 다를 수도 있습니다. 복사 작업 후 FileClose에 의해 닫히는 방식으로 다른 사람의 파일 핸들을 얻으려고 했습니다. 아무것도.

4. 복사시 손잡이가 필요 없습니다. 문제 없이 복사되었습니다. 그러나 복사를 위해 파일이 자동으로 열립니다. 다음으로 핸들이 없기 때문에 FileClose 로 닫을 수 없습니다. 복사된 파일을 삭제한 후 FolderClean이 작동하지 않는 이유일 수 있습니다.

5. 복사 후 파일이 열리지 않는다는 것을 어떻게 알 수 있습니까? 이것은 FileOpen 함수에 의해 명시적으로 열리지 않았지만 함께 복사되었으므로 열려 있음을 의미합니다. 따라서 복사 후에도 지워진 후에도 열려 있습니다. 아마.