掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
AssignFileされたファイルを、CloseFileしないまま、再度AssignFileすることはNGなのか?その弊害は? (ID:148733)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> それで意図通り動いてはいるものの こんなのがあります (問題に気づかない例です), http://mrxray.on.coocan.jp/Delphi/Others/ArrayRangeCheck.htm#fig10 本当に問題ないのであれば,そのままでいいと思いますよ. 以下は参考用のテストコードです. コピペしてテストできます コピペしてテスト可能であることが重要です. maco さんが提示された BlockWrite(fl,); はコンパイルエラーとなります. http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%85%A5%E5%87%BA%E5%8A%9B%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } FTextFile : TextFile; FFilePath : string; end; var Form1: TForm1; implementation {$R *.dfm} //============================================================================= // フォーム生成時の処理 // 質問では型なしファイルになっているが,テキストファイルを扱っている // そこでファイルの型は TextFie にしている // 型なしファイルで BlockWrite を使用した場合でも現象は同じと思われる // // 以下を確認する // // (1) EXE を起動して,終了じないでテキストファイル 000.txt の内容を確認 // (2) EXE を起動して,すぐに終了してテキストファイル 000.txt の内容を確認 // (3) EXE を起動して Button1 をクリックして 000.txt の内容を確認 // // (4) 最後の Close を削除して上と同じように動作確認する // (5) 最後の Close を CloseFile に変更して上と同じように動作確認する // // 動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 //============================================================================= procedure TForm1.FormCreate(Sender: TObject); begin FFilePath := '000.txt'; System.Assignfile(FTextFile, FFilePath); System.Rewrite(FTextFile); System.Writeln(FTextFile, '1 行目'); System.Writeln(FTextFile, '2 行目'); System.Writeln(FTextFile, '3 行目'); // System.CloseFile(FTextFile); System.Close(FTextFile); end; //============================================================================= // フォーム破棄時の処理 //============================================================================= procedure TForm1.FormDestroy(Sender: TObject); begin try // System.CloseFile(FTextFile); System.Close(FTextFile); except end; end; //============================================================================= // テキストファイルに文字列を書き込む //============================================================================= procedure TForm1.Button1Click(Sender: TObject); var LTextFile : TextFile; begin System.Assignfile(LTextFile, FFilePath); System.Rewrite(LTextFile); System.Writeln(LTextFile, '4 行目'); System.Writeln(LTextFile, '5 行目'); System.Writeln(LTextFile, '6 行目'); // System.CloseFile(LTextFile); System.Close(LTextFile); end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.