C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: テキストファイルへの書き込み


(過去ログ 24 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■10748 / inTopicNo.1)  テキストファイルへの書き込み
  
□投稿者/ taku (1回)-(2007/11/25(Sun) 10:47:18)

分類:[C#] 

はじめまして。

richTextBox1の文字列を改行を保ったまま、
すでに書き込みのあるテキストファイルの末尾に付け加えるには
どのようにすればよいのでしょうか?
開発環境はVisualStudio2005professionalでC#です。

初歩的な質問ですみませんがよろしくお願いします。
引用返信 編集キー/
■10750 / inTopicNo.2)  Re[1]: テキストファイルへの書き込み
□投稿者/ επιστημη (681回)-(2007/11/25(Sun) 12:49:14)
επιστημη さんの Web サイト
> richTextBox1の文字列を改行を保ったまま、
> すでに書き込みのあるテキストファイルの末尾に付け加えるには
> どのようにすればよいのでしょうか?

問題はどこですか?

"既存のテキストファイルの末尾に追加書き込みする方法"ですか?
"新規でテキストファイルに書き込むことはできている"のですか?

引用返信 編集キー/
■10751 / inTopicNo.3)  Re[2]: テキストファイルへの書き込み
□投稿者/ taku (2回)-(2007/11/25(Sun) 13:26:05)
"既存のテキストファイルの末尾に追加書き込みする方法"です。
説明不足で申し訳ありませんでした。
引用返信 編集キー/
■10752 / inTopicNo.4)  Re[3]: テキストファイルへの書き込み
□投稿者/ επιστημη (682回)-(2007/11/25(Sun) 14:08:25)
επιστημη さんの Web サイト
ざっくりとこんな感じでしょうか。

System.IO.FileStream stream = System.IO.File.Open("なにかしら.rtf", 
             System.IO.FileMode.Append | System.IO.FileMode.OpenOrCreate);
System.IO.StreamWriter writer = new System.IO.StreamWriter(stream);
writer.Write(追加文字列);
writer.Close();

引用返信 編集キー/
■10755 / inTopicNo.5)  Re[4]: テキストファイルへの書き込み
□投稿者/ taku (3回)-(2007/11/25(Sun) 15:06:21)
ありがとうございます。
このコードで既存のテキストファイルの末尾に追加書き込みできました。
しかし、 richTextBox内で改行していた文字列が
テキストファイル内では1行にまとめられてしまいます。
これの解決方法はありませんでしょうか?
引用返信 編集キー/
■10756 / inTopicNo.6)  Re[5]: テキストファイルへの書き込み
□投稿者/ επιστημη (683回)-(2007/11/25(Sun) 15:16:27)
επιστημη さんの Web サイト
> しかし、 richTextBox内で改行していた文字列が
> テキストファイル内では1行にまとめられてしまいます。

再現できません。コードを見せてください。

引用返信 編集キー/
■10757 / inTopicNo.7)  Re[6]: テキストファイルへの書き込み
□投稿者/ taku (4回)-(2007/11/25(Sun) 15:32:48)
private void button5_Click(object sender, EventArgs e)
{
    System.IO.FileStream stream = System.IO.File.Open(@"***.txt",
                 System.IO.FileMode.Append | System.IO.FileMode.OpenOrCreate);
    System.IO.StreamWriter writer = new System.IO.StreamWriter(stream);
    writer.Write(richTextBox1.Text);
    writer.Close();
}

テキストボックス内の文字列を1行づつ読み込む方法が分からないんです。

引用返信 編集キー/
■10758 / inTopicNo.8)  Re[7]: テキストファイルへの書き込み
□投稿者/ επιστημη (684回)-(2007/11/25(Sun) 15:37:32)
επιστημη さんの Web サイト
確認。そのコードによって生成されたファイルには改行がちゃんと入っていますか?

> テキストボックス内の文字列を1行づつ読み込む方法が分からないんです。

なんで読み出しコードを見せてくれないの?
そっちがわかんないんじゃないの?

引用返信 編集キー/
■10759 / inTopicNo.9)  Re[5]: テキストファイルへの書き込み
□投稿者/ 魔界の仮面弁士 (534回)-(2007/11/25(Sun) 15:46:08)
物理改行のことなのか、折り返しによるソフト改行のことなのか判断できませんでしたが、
とりあえず、物理改行と仮定して回答します。

No10755 (taku さん) に返信
> しかし、 richTextBox内で改行していた文字列が
> テキストファイル内では1行にまとめられてしまいます。

System.Windows.Forms.RichTextBox での改行コードは LF です。
CR のみ、あるいは CRLF を必要とする場合は、置換が必要になるかと。

また、文字コードの指定にも気を付けてください。
No10752 のコードをそのまま実行した場合、UTF-8 テキストとして扱われますので。

# しかし、txt ならともかく、rtf 形式のテキストファイルに Append するのはマズイのでは? > επιστημη さん
引用返信 編集キー/
■10760 / inTopicNo.10)  Re[6]: テキストファイルへの書き込み
□投稿者/ επιστημη (685回)-(2007/11/25(Sun) 15:55:36)
επιστημη さんの Web サイト
2007/11/25(Sun) 15:58:24 編集(投稿者)

> # しかし、txt ならともかく、rtf 形式のテキストファイルに Append するのはマズイのでは?

マズイでしょうね。んだけど書き込み側コード(No10757)が
writer.Write(richTextBox1.Text);
となってるんで、これはベタなテキストファイルすね。

引用返信 編集キー/
■10761 / inTopicNo.11)  Re[8]: テキストファイルへの書き込み
□投稿者/ taku (5回)-(2007/11/25(Sun) 16:01:27)
No10758 (επιστημη さん) に返信
> 確認。そのコードによって生成されたファイルには改行がちゃんと入っていますか?
たとえば
「おはよう
 こんにちは」
と書いてあるファイルにこのコードで「こんばんは」を追加すると

「おはよう
 こんにちはこんばんは」になります。

> なんで読み出しコードを見せてくれないの?
> そっちがわかんないんじゃないの?
読み出しはまったく分からなかったため上のコードの
writer.Write(richTextBox1.Text);
で済ませています。
『テキストボックス内の文字列を1行づつ読み込む方法が分からない』というのは
System.IO.StreamReaderの ReadLine メソッドのようなものがあるなら教えていただきたい、ということです。

引用返信 編集キー/
■10762 / inTopicNo.12)  Re[9]: テキストファイルへの書き込み
□投稿者/ επιστημη (686回)-(2007/11/25(Sun) 16:07:27)
επιστημη さんの Web サイト
> たとえば
> 「おはよう
>  こんにちは」
> と書いてあるファイルにこのコードで「こんばんは」を追加すると
>
> 「おはよう
>  こんにちはこんばんは」になります。

それは単に元のテキストの末尾が改行で終わってないだけちゃいます?
「おはよう
こんにちは」
の末尾につないだらそうなるのがアタリマエです。

元ファイルが
「おはよう
こんにちは

じゃないと。

> 『テキストボックス内の文字列を1行づつ読み込む方法が分からない』というのは
> System.IO.StreamReaderの ReadLine メソッドのようなものがあるなら教えていただきたい、ということです。

丸ごと読んでしまえばいい。
System.IO.StreamReader reader = new System.IO.StreamReader(ファイル名);
richTextBox1.Text = reader.ReadToEnd();
reader.Close();

引用返信 編集キー/
■10763 / inTopicNo.13)  Re[10]: テキストファイルへの書き込み
□投稿者/ taku (6回)-(2007/11/25(Sun) 16:23:33)
> それは単に元のテキストの末尾が改行で終わってないだけちゃいます?
例が悪かったです。
「おはよう
 こんにちは
 」
に「こんばんは
  さようなら」を追加しても

「おはよう
 こんにちは
 こんばんはさようなら」になります。


失礼、いろいろと説明不足でした。
richTextBox1のテキストはtextBox1の文字列に変更がある度に、
textBox1の変更後の文字列 + "\n"が追加されるようになっています。
改行コードの種類についてはまったく意識していませんでしたが、\nを使っているのが問題だったのでしょうか?
引用返信 編集キー/
■10764 / inTopicNo.14)  Re[11]: テキストファイルへの書き込み
□投稿者/ επιστημη (687回)-(2007/11/25(Sun) 16:45:28)
επιστημη さんの Web サイト
> 「おはよう
>  こんにちは
>  」
> に「こんばんは
>   さようなら」を追加しても
>
> 「おはよう
>  こんにちは
>  こんばんはさようなら」になります。

問題は"書き"なのか"読み"なのかを確認してください。
書く直前、Writeに与えた文字列に改行が正しく入っていますか?
書いた直後、できたファイルの内容は正しいですか?

"わからない"を連呼するんじゃなくてさ、
"どこまで正しいか/どこからオカシイか"ひとつづつ確認しようよ。

引用返信 編集キー/
■10765 / inTopicNo.15)  Re[11]: テキストファイルへの書き込み
□投稿者/ 魔界の仮面弁士 (535回)-(2007/11/25(Sun) 16:58:06)
2007/11/25(Sun) 20:11:19 編集(投稿者)
No10763 (taku さん) に返信
> textBox1の変更後の文字列 + "\n"が追加されるようになっています。
RichTextBox なのか TextBox なのか、ハッキリさせておいてください。(^^;

# TextBox の内容を、逐次 RichTextBox とファイルに記録するのか、
# それとも、常に RichTextBox の方からファイルに記録するのかを。


No10759 にも書きましたように、Text プロパティから返されるデータは、
>> System.Windows.Forms.RichTextBox での改行コードは LF です。
となっていますので、どちらの Text プロパティを使うかによって、
改行コードを意識せねばなりません。


以下、実験コード。C#2005/2008 向け。

private void button1_Click(object sender, EventArgs e)
{
    System.Converter<string, string> converter = delegate(string text)
    {
        return BitConverter.ToString(Encoding.ASCII.GetBytes(text));
    };

    Dictionary<string, string> dic = new Dictionary<string,string>();
    dic.Add("CrLf", "\r\n");
    dic.Add("Cr", "\r");
    dic.Add("Lf", "\n");

    foreach (KeyValuePair<string, string> item in dic)
    {
        listBox1.Items.Add(item.Key + " (" + converter(item.Value) + ")");

        textBox1.Text = item.Value;
        listBox1.Items.Add("  TextBox     => " + converter(textBox1.Text));

        richTextBox1.Text = item.Value;
        listBox1.Items.Add("  RichTextBox => " + converter(richTextBox1.Text));
    }
}

上記の実行結果は、下記のようになります。


CrLf (0D-0A)
  TextBox     => 0D-0A
  RichTextBox => 0A
Cr (0D)
  TextBox     => 0D
  RichTextBox => 0A
Lf (0A)
  TextBox     => 0A
  RichTextBox => 0A



■No10760 (επιστημη さん) に返信
> んだけど書き込み側コード(No10757)が
> writer.Write(richTextBox1.Text);
> となってるんで、これはベタなテキストファイルすね。

いえ、taku さんがどう思っていたのかというよりも。

おそらくεπιστημη さん自身は、rtf だと
> マズイでしょうね。
と理解しているだろう、と思ったのですが、実際には
>> File.Open("なにかしら.rtf", 
と書かれていたようなので、ちょっと気になっただけです。(^^;

引用返信 編集キー/
■10770 / inTopicNo.16)  Re[7]: テキストファイルへの書き込み
□投稿者/ taku (7回)-(2007/11/25(Sun) 20:53:56)
報告遅れてすみません。
RichTextBoxをTextBoxに変えて、改行を\r\nにすることで解決できました!
(RichTextBoxでは\r\nにしてもダメでした)
επιστημηさん、魔界の仮面弁士さん、
長いことつき合わせてすみませんでした。ありがとうございます。
今回自分の勉強不足や国語力のなさを改めて実感しました。
勉強して出直すので、その時はまたよろしくお願いしますm(__)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -