2017.08.2817:36:18.525 Demo_FolderDelete EURUSD.e,H4: Не удалось удалить папку nonempty. Код ошибки=50252017.08.2817:36:16.985 Demo_FolderDelete EURUSD.e,H4: Не удалось очистить папку nonempty. Код ошибки=5026
2017.08.2817:50:45.328 Demo_FolderDelete (CADJPY,H4) Не удалось очистить папку nonempty. Код ошибки=50252017.08.2817:50:47.958 Demo_FolderDelete (CADJPY,H4) Не удалось удалить папку nonempty. Код ошибки=5024
私の知る限り、ファイル関数(FileWrite()など)を使ってファイルに変更を加えていない場合は、ファイルを閉じる必要はありません。FileOpen()関数は単に新しいファイルを作成するだけで、この操作ではファイルを閉じる必要はありません(この関数のドキュメントにも、作成後にファイルを閉じる必要があることは書かれていません)。
オイ・リー!ストーリーテラーhttps://docs.mql4.com/ru/files/fileopen
//---"ファイルのサンドボックス "で作業する正しい方法
ResetLastError()。
filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV).FileHandleを 指定します。
if(filehandle!=INVALID_HANDLE) とする。
{
FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(ENUM_TIMEFRAMES(_Period)))。
FileClose(filehandle)。
Print("FileOpen OK");
}
elsePri
オイ・リー!ストーリーテラーhttps://docs.mql4.com/ru/files/fileopen
私が言ったこととの矛盾は何ですか?
と言ったのですが......。
レタグ・コノウ
私の知る限り、ファイル関数(FileWrite()など)を使ってファイルに変更を加えていない場合は、ファイルを閉じる必要はありません。FileOpen()関数は単に新しいファイルを作成するだけで、この操作ではファイルを閉じる必要はありません(この関数のドキュメントにも、作成後にファイルを閉じる必要があることは書かれていません)。
しかし、あなたの例では、ファイルが作成された直後にFileWrite()関数が使用されています。そして、 FileClose(filehandle) を使用するのです。
また、上記のスクリプトのコードで、明示的にクロージャを追加しましたが、何も解決しませんでした...。
まさにこの通り。すでにサブフォルダーやファイルを含むフォルダーを削除しようとすると、先にファイルを削除してしまう。サブフォルダーだけが残ります。FolderClean()でクリーニングしてから、FolderDelete()を呼び出すようにしています。しかし、その結果、空だったサブフォルダーはしっかり削除されますが、サブフォルダーの中にさらにサブフォルダーがあった場合は削除されないのです。その後、手動でMetaEditorのファイルナビゲータからフォルダを削除しようとするのですが、ターミナルでは削除されず、このようなウィンドウがポップアップ表示されます。
続行」をクリックし、変更に同意しましたが、フォルダはまだ消去されません。ターミナルを完全に閉じて開き直すと、消したはずのフォルダが勝手に消えたり消えなかったりしますが、上記のウィンドウがなくても、すぐに手動で消すことができます。
そんな不思議なことが...。
こういうのは何度も見たことがある。Files フォルダとそのサブフォルダ、およびファイルが、ある瞬間に読み取り専用になることがわかりました。手動でこのフラグの選択を解除しても、効果はありません。しかし、ターミナルを再起動することでいつも解決します。再生できなかった(試していない)ので、SDに報告しなかった。
エラー(5022)は、FILE_COMMONを 設定した場合のみ発生します。
フォルダは消去されますが、削除されません。
このフラグを設定しないと、ファイルが共有フォルダで検索され、ディレクトリ名が間違っているというエラーが発生します。
ファイルパス
"\\MQL4\\Files";
は、このフラグを設定する必要はありません。だから、すべてが正しいのです。
このようなことは何度も経験しています。ある時点で、すべてのサブフォルダーとファイルを含むFilesフォルダーが読み取り専用属性になることがわかりました。手動でこのフラグの選択を解除しても、効果はありません。しかし、ターミナルを再起動することでいつも解決します。再生できなかった(試していない)ので、SDに報告しなかった。
このフラグを設定しないと、ファイルが共有フォルダで検索され、ディレクトリ名が間違っているというエラーが発生します。
FILE_COMMONの 有無にかかわらず、動作します(元々、チェック時に最後のifにこのフラグを入れるのを忘れていました)。FILE_COMMON では、すべての操作に存在することを暗示していました。
このフラグを設定しないと、ファイルが公開フォルダで検索され、ディレクトリ名が間違っているとのエラーが発生します。
ファイルへのパス
は、このフラグを設定する必要はありません。だから、すべてが正しいのです。
これって、全部おかしいですよね。MQL4のフォルダパスに気づき、コードを.ex4に再コンパイルしたところ、不思議なことにエラーなく動作するようになりました。ファイルのクローズアップを 削除したら
その後、修正せずにmt5で実行したところ、不思議なことにMQL4フォルダの記載が無視されました。MQL5フォルダにフォルダとファイルが作成されました。ここからは、MT4と同じです。閉じていないファイルが削除されない・・・。
これって、全部おかしいですよね。MQL4のフォルダパスに気づき、コードを.ex4に再コンパイルしたところ、不思議なことにエラーなく動作するようになりました。ファイルクロージャーを 削除して、次のようになりました。
その後、修正せずにmt5で実行したところ、不思議なことにMQL4フォルダの記載が無視されました。MQL5フォルダにフォルダとファイルが作成されています。ここからは、MT4と同じです。閉じていないファイルが削除されない・・・。
つまり、スクリプトからExpert Advisorを作って動かしてみたのですね。
でも、閉じても問題は解決しない...。残念...(