前提・実現したいこと
StreamWriterでファイルを書き込んでいる最中にEscキーなどで中断したいです。
中断しない場合は、MessageBoxを出力して、ウェブブラウザにデータを投げたいので、
同期で書き込みを行っています(HTMLを生成してます)。
よって、非同期で処理するという選択肢はありません。
良い方法があればご教授下さいませ。
(自分では情報を探せませんでしたが、既出であれば申し訳ありません)
ファイルの書き込み中に入力をチェックする以外に方法がありますか?
StreamWriter ということはテキストデータですよね?
一行書き込むごとにチェックすればいいように思いますが、何にひっかかっているのでしょうか?
何故そんなことがしたいのか、そもそもの目的、全体のシナリオを描いた方が的確なレスが付きやすい気がします。(XY 問題になっているのではと疑ってます)
返信有難う御座います
質問が足りませんでした
出力用の変数(lines)に、全データを入力していて、その変数をWriteLine(lines)していますので
行を分けることが出来ないのです・・・
linesは、少しでもファイルサイズを節約するために、CRLFを入れていませんので、行に分ける事が出来ません・・・
1行ずつ書き出すようにした方が、良いでしょうか・・・
一行しか書かないならそれほど時間はかからないので中断しなくていいでしょう。書き込んでからチェックすればいいと思います。
書き込み用データの作成に時間がかかるなら、そこでチェックすればいいでしょう。
書いている内容が、数百ページにも及ぶ伝票データのHTMLを1行にいますので
サイズ的には5MByteとかになりますので、ほぼ確実にビジーの状態となります・・・
> linesは、少しでもファイルサイズを節約するために、CRLFを入れていませんので、行に分ける事が出来ません・・・
改行コードを入れれば解決するなら入れれば良いのでは? その程度のことで節約になるなんて考え方はおかしいと思うのですが。
それよりなにより、その前に中断など考えずに一気に書き込んでしまった方が良いのでは? リソースの節約とか、ファイルがロックされて困るとかがなくなるかもしれませんし。
> サイズ的には5MByteとかになりますので、ほぼ確実にビジーの状態となります・・・
やり始めて途中で何かほかのことをしなければならなくなった場合などビジー状態では困るので処理は中断したいということがそもそもの目的ですか? だとすると、やはり XY 問題&本末転倒のように思うのですが?
書出時に、読込むデータを間違ってしまった事に気が付いたときなどに中断したい事があります
> 改行コードを入れれば解決するなら入れれば良いのでは?
そうですね、改行コードで行分けするように、対策してみたいと思います
大きいデータについては基本的に小分けで書きこむもので、一回で送るものではないです。中断については、ちょうど似たような質問があったこちらが参考になると思います。https://teratail.com/questions/268987
> 読込むデータを間違ってしまった事に気が付いたときなどに中断したい事があります
間違わないような仕組みを組み込む・・・なんてことはもうやっているのでしょうね?
そもそも 5MB 程度のテキストをファイルに書き込むのにそれほど時間がかかるとは思えないのですが。途中で間違っていることに気付いて中断するコマンドを発行する前に終わってしまうのではないですか。
質問者さんのケースではどのぐらいの時間がかかるのですか。待てないほど長いとするとどこかにボトルネックがあってそれを解決するという話が先と思うのですが、そういうことは検討済み?
確かに5Mだとそんなに掛からなさそうですよね。ディスクがめちゃくちゃ遅いとかそんな環境かな…
主に、長いと感じる時は、データが20MB程になっている時ですね
ボトルネック解決につきましては、SuferOnWwwさんに言われるまで気が付きませんでした(汗
radianさんにも指摘されてますし、自分でも同様に思えましたので、小分け書込みでやり直します
読み書きのバッファ量で速度かわったりするので、その辺も見た方がいいですね(小さすぎると遅い)
速攻で終わるのなら中断する必要もない訳ですし
どうせMessageBoxを表示するんですから、書き込み後に送信する時にユーザーに問い合わせするだけで終わる話のような気がします。
回答2件
あなたの回答
tips
プレビュー