none
テキストファイルの出力について RRS feed

  • 質問

  • C#でテキストファイルを出力(既にあれば上書き)するプログラムをコーディング中です。

     

    Buf = Buf + "AAAAA";

    Buf = Buf + "BBBBB";

    Buf = Buf + "あああああ";

    Buf = Buf + "いいいいい";

     ・

     ・

     ・

    string stBuffer = Buf;

    System.IO.StreamWriter sw = new System.IO.StreamWriter(@".\SAMPLE.txt");

    sw.Write(stBuffer);

    sw.Close();

     

    とすると正常に出力さるのですが出力先テキストファイルの

    1行目~10行目まではプログラムにて出力

    11行目~最終行は手入力

    としたく思ってます。

     

    上記のコーディングだと、11行目以下に手入力で文字を書いてもプログラムにて保存すると

    1行目~10行目しか出力されず、手入力した部分が消された形で出力されます。

     

    プログラムでの出力方法で、該当する部分のみを書き換えて保存する仕方ってあるんでしょうか?

     

     

    2007年7月31日 10:39

すべての返信

  • 一度全部読み込んで、10個目の改行までを書き換えて、保存すれば、よいのでは?

    このとき、きちんと改行を認識できるかどうかが問われるかと。

    2007年7月31日 14:10
  • おはようございます。

     

    10行目までは正常に保存されるんですが、プログラム実行前に11行目以下にエディタ等で書き込みがあった場合、

    プログラムの上記ロジックが実行されると、エディタで書き込んだ部分(11行目以下)が消えちゃうんですよ・・・。

     

    2007年8月1日 0:08
  • もうすでに適切な回答がついているのですが、詳しく解説すると、

    1. 既にあるファイルの11行目以降を読み込んでメモリ上に取っておく。
    2. ファイルを開き、書き込みモードで10行目までを出力する。(11行目以降は消えてしまう)
    3. 1で取っておいたデータを続けて出力する

    という手順になります。
    2007年8月1日 0:24
  • おはようございます。

     

    プログラム起動時(フォームLoad時)にメモリ上に保存する方法は理解できました。

     

    別の手段として、11行目以下の有無に関係無く1行目~10行目だけを変更保存する方法ってのは無いんでしょうか?

    (伝わりにくいかも知れませんが・・・)

    2007年8月1日 1:13
  • 1行目~10行目の(改行文字を含めた)文字数が変わらないのであれば可能だと思われます。

    ※正確には文字数ではなく、出力時の文字コードでのバイト数ってことです。
    変わる場合、ファイルといっても単なる情報の羅列であるため、11行目の開始位置がずれてしまうような(固定長でない)場合、
    どうしても(11行目以降の)情報を移動したりしないといけなくなるため単純に置き換えということは出来ないのです。

    2007年8月1日 1:31
  • こんにちは。

     

    1 の手順にある11行目以降を読込むには、どうすればいいんでしょうか?

    ReadAllText で指定行までシフトできたりするんでしょうか?

    2007年8月1日 4:49
  • ReadAllTextは名前のとおりすべてのテキストを読み込むものです。

    というか、どのクラスのメソッドを指していますか?
    書き出し時にStreamWriteを使っているので読み込み時はStreamReaderかと思っているのですけど。
    (StreamReaderだとReadToEndメソッドだと思われるんだけど。ReadToEndなら読み込み位置をシークさせれば
    そこから読み込めるはずだけど。)

    System.IO.Fileクラスであれば、ReadAllLinesメソッドで全行読み込んでから
    配列の最初の10要素を適当に書き換えて、WriteAllLinesで書き込むってことが出来そうです。

    2007年8月1日 5:07