ファイルの内容を読み取ってファイルにデータを追加する方法がわかりません。私が現時点で使用しているhGetContents
は、読み込み後にファイルを閉じるように見えるので、書き込むことはできません。ファイルの内容を読み取ってからファイルに追加します
どうすれば対処できますか?
ファイルの内容を読み取ってファイルにデータを追加する方法がわかりません。私が現時点で使用しているhGetContents
は、読み込み後にファイルを閉じるように見えるので、書き込むことはできません。ファイルの内容を読み取ってからファイルに追加します
どうすれば対処できますか?
ファイルの内容を取得しないでください。
適切なことは、ファイルを開いて編集して閉じることです。 getContentメソッドは、あなたのコンテンツを取得し、それ以外は何もしません。
擬似コード::
オープン(場合によっては)ファイル
読む/追加ファイル
は
ファイルを閉じます。ここドキュメントは http://haskell.org/ghc/docs/latest/html/libraries/base/System-IO.html
です多分次のようなものです:
import System.IO
modifyFile :: FilePath -> (String -> String) -> IO()
modifyFile fn func = do
str <- readFile fn
length str `seq` return()
appendFile fn (func str)
SEQコールが完全に読み込まれるファイルを強制的に、我々は(または書き込みに失敗した)、それに追加して再オープンする前に、ファイルを閉じました。
これはすばやく汚れています。もっと精巧なことをしたい場合は、System.IO.hSeekと関連する関数を調べることができます。例えば。それを開いて、それを読んで、最後を追い求めて、追加してください。
hGetContents
は、ファイルハンドルをクローズ(または半クロージング)するので、他の操作には使用できなくなっています。 1つのオプションは、ファイルを読み込んだ後に追加するために新しいハンドルを取得し、それを追加のために使用することですが、何らかの理由でファイルの内容を完全に再処理する前に処理しないと予期しない動作が発生する可能性があります。
もう1つの方法は、ファイルの末尾に到達するまでhGetLine
(データが行ベースの場合)を使用して、別の方法で内容を読み取って内容を読み取ることです。同じハンドル。
変更する前に、ファイルの内容を確認する必要があります。 –
getcontent funcを使用して、ファイルを開く、追加して閉じる前にファイルの内容を表示します。 – Mob