閉じていないファイルがある場合、フォルダは削除されない - ページ 3

 
Реter Konow:
私の知る限り、ファイル関数(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

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

オイ・リー!ストーリーテラーhttps://docs.mql4.com/ru/files/fileopen


私が言ったこととの矛盾は何ですか?

と言ったのですが......。

レタグ・コノウ
私の知る限り、ファイル関数(FileWrite()など)を使ってファイルに変更を加えていない場合は、ファイルを閉じる必要はありません。FileOpen()関数は単に新しいファイルを作成するだけで、この操作ではファイルを閉じる必要はありません(この関数のドキュメントにも、作成後にファイルを閉じる必要があることは書かれていません)。


しかし、あなたの例では、ファイルが作成された直後にFileWrite()関数が使用されています。そして、 FileClose(filehandle) を使用するのです。


また、上記のスクリプトのコードで、明示的にクロージャを追加しましたが、何も解決しませんでした...。

 
Реter Konow:

まさにこの通り。すでにサブフォルダーやファイルを含むフォルダーを削除しようとすると、先にファイルを削除してしまう。サブフォルダーだけが残ります。FolderClean()でクリーニングしてから、FolderDelete()を呼び出すようにしています。しかし、その結果、空だったサブフォルダーはしっかり削除されますが、サブフォルダーの中にさらにサブフォルダーがあった場合は削除されないのです。その後、手動でMetaEditorのファイルナビゲータからフォルダを削除しようとするのですが、ターミナルでは削除されず、このようなウィンドウがポップアップ表示されます。

続行」をクリックし、変更に同意しましたが、フォルダはまだ消去されません。ターミナルを完全に閉じて開き直すと、消したはずのフォルダが勝手に消えたり消えなかったりしますが、上記のウィンドウがなくても、すぐに手動で消すことができます。

そんな不思議なことが...。

こういうのは何度も見たことがある。Files フォルダとそのサブフォルダ、およびファイルが、ある瞬間に読み取り専用になることがわかりました。手動でこのフラグの選択を解除しても、効果はありません。しかし、ターミナルを再起動することでいつも解決します。再生できなかった(試していない)ので、SDに報告しなかった。

 
A100:

エラー(5022)は、FILE_COMMONを 設定した場合のみ発生します。

フォルダは消去されますが、削除されません。

このフラグを設定しないと、ファイルが共有フォルダで検索され、ディレクトリ名が間違っているというエラーが発生します。

ファイルパス

"\\MQL4\\Files";

は、このフラグを設定する必要はありません。だから、すべてが正しいのです。

 
fxsaber:

このようなことは何度も経験しています。ある時点で、すべてのサブフォルダーとファイルを含むFilesフォルダーが読み取り専用属性になることがわかりました。手動でこのフラグの選択を解除しても、効果はありません。しかし、ターミナルを再起動することでいつも解決します。再生できなかった(試していない)ので、SDに報告しなかった。

ありがとうございます。この問題に直面しているのは私だけではないようで嬉しい。この問題を解決する必要があります(これがないとファイルナビゲータを 使い終えることができません)。servicedeckに手紙を書きました。でも、念のため、ここにも書いておきます。結果的には無駄にはならなかったが)。
 
Реter Konow:

このフラグを設定しないと、ファイルが共有フォルダで検索され、ディレクトリ名が間違っているというエラーが発生します。

FILE_COMMONの 有無にかかわらず、動作します(元々、チェック時に最後のifにこのフラグを入れるのを忘れていました)。FILE_COMMON では、すべての操作に存在することを暗示していました。

 
Реter Konow:

このフラグを設定しないと、ファイルが公開フォルダで検索され、ディレクトリ名が間違っているとのエラーが発生します。

ファイルへのパス

は、このフラグを設定する必要はありません。だから、すべてが正しいのです。

これって、全部おかしいですよね。MQL4のフォルダパスに気づき、コードを.ex4に再コンパイルしたところ、不思議なことにエラーなく動作するようになりました。ファイルのクローズアップを 削除したら

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

その後、修正せずにmt5で実行したところ、不思議なことにMQL4フォルダの記載が無視されました。MQL5フォルダにフォルダとファイルが作成されました。ここからは、MT4と同じです。閉じていないファイルが削除されない・・・。

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
 
と、サーベイヤーは答えた。作成後、ファイルを閉じなければならないとのこと。でも、閉じても問題は解決しない...。残念...(
 
Alexey Viktorov:

これって、全部おかしいですよね。MQL4のフォルダパスに気づき、コードを.ex4に再コンパイルしたところ、不思議なことにエラーなく動作するようになりました。ファイルクロージャーを 削除して、次のようになりました。

その後、修正せずにmt5で実行したところ、不思議なことにMQL4フォルダの記載が無視されました。MQL5フォルダにフォルダとファイルが作成されています。ここからは、MT4と同じです。閉じていないファイルが削除されない・・・。

つまり、スクリプトからExpert Advisorを作って動かしてみたのですね。

 
Реter Konow:
でも、閉じても問題は解決しない...。残念...(
そして、どこでもFILE_COMMONを試してみて ください。