8

私は次のコードを書いて、データを既存のデータにそのまま追加しますが、私のコードはこれを上書きします

コード追加データへの変更はどうすればよいですか。

protected void Page_Load(object sender, EventArgs e)
{
    fname = Request.Form["Text1"];
    lname = Request.Form["Text2"];
    ph = Request.Form["Text3"];
    Empcode = Request.Form["Text4"];

    string filePath = @"E:Employee.txt";
    if (File.Exists(filePath))
    {
        //StreamWriter SW;
        //SW = File.CreateText(filePath);
        //SW.Write(text);
        //SW.Close();
        FileStream aFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        StreamWriter sw = new StreamWriter(aFile);
        sw.WriteLine(Empcode);
        sw.WriteLine(fname);
        sw.WriteLine(lname);
        sw.WriteLine(ph);
        sw.WriteLine("**********************************************************************");

        sw.Close();
        aFile.Close();
    }
    else
    {
        //sw.Write(text);
        //sw.Flush();
        //sw.Close();
        //StreamWriter SW;
        //SW = File.AppendText(filePath);
        //SW.WriteLine(text);
        //SW.Close();

        FileStream aFile = new FileStream(filePath, FileMode.Append, FileAccess.Write);
        StreamWriter sw = new StreamWriter(aFile);

        sw.WriteLine(Empcode);
        sw.WriteLine(fname);
        sw.WriteLine(lname);
        sw.WriteLine(ph);
        sw.WriteLine("**********************************************************************");

        sw.Close();
        aFile.Close();
        //System.IO.File.WriteAllText(filePath, text);
    }
    Response.Write("Employee Add Successfully.........");
}
4

5 に答える 5

22

FileMode.Append のドキュメントには次のように書かれています。

ファイルが存在する場合はファイルを開き、ファイルの最後までシークするか、新しいファイルを作成します。この操作には、FileIOPermissionAccess.Append権限が必要です。FileMode.Appendは、FileAccess.Writeと組み合わせてのみ使用できます。ファイルの終わりより前の位置をシークしようとするとIOException例外がスローされ、読み取りを試みると失敗してNotSupportedException例外がスローされます。

したがって、ファイルが存在しない場合はファイルが自動的に作成されるifため、ステートメントは不要になります。FileMode.Append

したがって、完全なソリューションは次のようになります。

using (FileStream aFile = new FileStream(filePath, FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(aFile)) {
    sw.WriteLine(Empcode);
    sw.WriteLine(fname);
    sw.WriteLine(lname);
    sw.WriteLine(ph);
    sw.WriteLine("**********************************************************************");
}

ヒント:using例外が発生した場合にも、リソースを自動的に閉じるために使用します。

于 2012-06-08T09:42:07.270 に答える
5

ファイルが存在する場合はファイルを作成し、存在しない場合は追加します。それはあなたが望むものの反対です。

次のように変更します。

if (!File.Exists(filePath))
于 2012-06-08T09:42:27.067 に答える
3

あなたは置く必要があります

  if (!File.Exists(filePath)) 

それ以外の

  if (File.Exists(filePath))
于 2012-06-08T09:41:54.517 に答える
1

に変更File.Exists(filePath)する!File.Exists(filePath) か、さらに良いことに、常に追加モードを使用します。存在しない場合はファイルを作成します

于 2012-06-08T09:44:31.820 に答える
0

ifとelseのステートメントは反対の方法である必要があるように私には思えますね。

ここで、ファイルが存在する場合は作成し、存在しない場合は追加します。(ファイルがまだ存在しない場合は、Appendもファイルを作成します。)

于 2012-06-08T09:46:34.067 に答える