stuncloud / UWSCR

UWSC互換スクリプト実行ツール
MIT License
50 stars 5 forks source link

FCLOSEしていないのに、空のFileが作られる #188

Closed DIYJii closed 2 weeks ago

DIYJii commented 2 months ago

概要

F_Writeオンで、新規FileのFOPENをすると、FCLOSEを掛けないでプログラム終了しても 中身のない空のファイルが作られる。(F_AUTOCLOSEは指定していない) FGET, FPUTを全くしなくても、結果は同じ

再現スクリプト

//TestFile.txtが存在しない事を確認

ID = FOPEN("C:\Users\Public\Documents\TestFile.txt",  F_Write or F_Read)

//TestFile.txtが作られた事を確認

再現手順

No response

回避方法

No response

備考

No response

バージョン

1.0.1

不具合発生環境

No response

stuncloud commented 2 months ago

原因

OpenOptions::create(true)しているため ファイルの新規作成が必要になる場合はFopen::close()時にファイル作成と書き込みを行うようにすれば良いはず

対策

enum TargetFile {
    File(File),
    New(OpenOptions),
}

その他

DIYJii commented 2 months ago

超速の回答有難うございます。

On Fri, Jul 12, 2024 at 1:08 PM Joey Takahashi @.***> wrote:

原因

OpenOptions::create(true)しているため ファイルの新規作成が必要になる場合はFopen::close()時にファイル作成と書き込みを行うようにすれば良いはず 対策

  • 排他制御対応のためファイルすでに存在している場合はFopen::openでopenしておく
  • 新規作成時はOpenOptionsを保持
    • この場合 Fopen::close が呼ばれたときに初めてcreateしopenする
  • Fopen::target を追加、Option (新設)を持つ

enum TargetFile { File(File), New(OpenOptions),}

その他

  • FILE_LIST は多分不要なのでなくしてもいいはず、すると Fopen::id も不要
  • Fopen::closeでFopen::targetをNoneにする
  • これでfidのコピーが作られても問題ないはず

— Reply to this email directly, view it on GitHub https://github.com/stuncloud/UWSCR/issues/188#issuecomment-2224474223, or unsubscribe https://github.com/notifications/unsubscribe-auth/BH6AXYV7JQD5LJI4R3ZX7JDZL5JFTAVCNFSM6AAAAABKYDLY22VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMRUGQ3TIMRSGM . You are receiving this because you authored the thread.Message ID: @.***>

stuncloud commented 4 weeks ago

変更