テキスト ファイルへの書き込み

注文データ等をテキストファイルに書き込むサンプルをご覧ください。

 

実行例

コードを見るより先に実行例を見てみましょう。

注文受付フォームです。名前や住所などを入力してもらいます。

送信ボタンをクリックすると、サーバー側にデータを保存し、その後「ご注文ありがとうございます」メッセージを表示します。

このように、サーバー側にテキストで注文データが記録されます。

 

コードの解説

以下のコード (sample6.aspx) をエディタで入力してください。

   1:  <%@ Import Namespace="System.IO" %>
   2:   
   3:  <script runat="server" language="C#">
   4:  void btn1_click(object sender, EventArgs ev)
   5:  {
   6:      string datetime = DateTime.Now.ToString("yyyyMMdd.HHmmss");
   7:      string order = datetime + "\t" + txtName.Text + "\t" + txtAddress.Text + "\t" + txtMail.Text;
   8:      string filename = Server.MapPath("~/App_Data/order.txt");
   9:      using (var s = new StreamWriter(filename, true))
  10:      {
  11:          s.WriteLine(order);
  12:      }
  13:      string message = datetime + " ご注文ありがとうございます。";
  14:      lblMessage.Text = Server.HtmlEncode(message);
  15:  }
  16:  </script>
  17:   
  18:  <html>
  19:  <head><title>テキスト ファイルへの書き込み</title></head>
  20:  <body>
  21:  <form runat="server">
  22:      <asp:label runat="server" id="lblMessage" backcolor="silver" /><br />
  23:      <b>品物の送付先 (お客様の住所) を入力してください。</b><br />
  24:      お名前: <asp:textbox runat="server" id="txtName" /><br />
  25:      住所: <asp:textbox runat="server" id="txtAddress" /><br />
  26:      メール: <asp:textbox runat="server" id="txtMail" /><br />
  27:      <asp:button runat="server" id="btn1" text="送信" onclick="btn1_click" />
  28:  </form>
  29:  </body>
  30:  </html>

1 行目は StreamWriter を使うためのおまじないです。StreamWriter は 9 行目で出てきます。

4 ~ 15 行目は 27 行目のボタンをクリックした際の処理です。

6 行目で日付時刻文字列を組み立てています。DateTime.Now で日付時刻が取得できます。yyyyMMdd.HHmmss というのは書式指定です。書式指定の際にどのようなものが使えるか知りたい方は カスタムの日付と時刻の書式指定文字列 をご覧ください。

7 行目で日時、名前、住所、メール アドレスをタブで連結した文字列を組み立てています。\t がタブです。

8 行目で注文データを保存するファイル名を決定しています。Server.MapPath や ~ や App_Data にはそれぞれ意味があるのですが説明は割愛します。とても重要なのでいつかは解説を書きます。@@@

9 行目で書き込み・追記でファイルを開きます。StreamWriter を使っているのでファイルは書き込み用だとわかります。StreamWriter の第二引数に true を指定している理由は追記を命じるためです。

11 行目でテキスト ファイルの末尾に一行追加しています。

9 行目で using を使ってファイルを開いたので、12 行目の } でファイルは閉じられます。開いたら閉じなければなりません。open したら close しなければなりません。using で処理を囲むと勝手に close してくれるので、using で処理を囲みましょう。

13 行目でメッセージを組み立てています。

14 行目では 22 行目に置いた Label  にメッセージをセットしています。Label にテキストを入れるときは Server.HtmlEncode で囲みましょう。さもないと・・・別の機会に解説を書きます。@@@

22 行目。ラベルの背景色 (backcolor) を銀色 (silver)にしています。

24 ~ 26 行目にテキスト ボックスを並べています。

27 行目に送信ボタンを配置しています。ボタンを押すと 4 行目に書いた処理が動きます。

 

トラブル対応 1

error CS0246: 型または名前空間名 'var' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

このように「var が使えない」とエラーが出ているなら web.config に compiler 要素を追加してください。

   1:  <configuration>
   2:   
   3:      <system.web>
   4:   
   5:          <!-- Off ならブラウザでアクセスしてきた全員にエラー情報を公開します -->
   6:          <!-- Off のまま放置しないこと -->
   7:          <customErrors mode="Off" />
   8:   
   9:          <!-- true ならデバッグ モードでコンパイルします -->
  10:          <!-- デバッグ モードだと、エラー情報がリッチになります (その分、サーバーへの負荷は増加するらしい) -->
  11:          <!-- true のまま放置しないこと -->
  12:          <compilation debug="true" />
  13:   
  14:      </system.web>
  15:   
  16:      <system.codedom>
  17:        <compilers>
  18:          <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  19:            <providerOption name="CompilerVersion" value="v3.5"/>
  20:            <providerOption name="WarnAsError" value="false"/>
  21:          </compiler>
  22:        </compilers>
  23:      </system.codedom>
  24:   
  25:  </configuration>

16 ~ 23 行目が ASP.NET で var を利用するために必要です。

 

トラブル対応 2

パス 'E:\Account\nyumon\webapps\example\App_Data\order.txt' の一部が見つかりませんでした。

App_Data フォルダが存在しないためエラーが出ています。

FTP クライアント を使って App_Data フォルダを作成してください。

FFFTP の右側ペインにて右クリックして [フォルダ作成] をクリック。
App_Data と入力。
App_Data フォルダができました。

 

参考になるページ

@ Import

StreamWriter.WriteLine メソッド (System.IO)

DateTime.Now プロパティ (System)

カスタムの日付と時刻の書式指定文字列

2006年12月16日

HttpServerUtility.MapPath メソッド (System.Web)

ASP.NET Web サイトのパス Web アプリケーションのルート演算子 (~)  についての解説があります。Firefox だと表示されませんので IE で訪れてください。

IIS 7.0 hiddenSegments Element for requestFiltering (IIS Settings Schema) App_Data が特別扱いされている理由の解説があります。

StreamWriter コンストラクタ (String, Boolean) (System.IO)

using ステートメント (C# リファレンス)

Label プロパティ (System.Web.UI.WebControls)