在C#中将数据附加到现有文件

时间:2012-06-08 09:39:53

标签: c#

我编写了以下代码,用现有数据附加数据,但我的代码覆盖了这个

我应该如何对代码追加数据进行更改。

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.........");
}

5 个答案:

答案 0 :(得分:13)

FileMode.Append的doc说:

  

打开文件(如果存在)并搜索到文件末尾,或创建新文件。此操作需要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因为它会在发生异常时自动关闭资源。

答案 1 :(得分:5)

您正在创建文件(如果存在),如果不存在则附加文件。这与你想要的相反。

将其更改为:

if (!File.Exists(filePath))

答案 2 :(得分:3)

你必须把

  if (!File.Exists(filePath)) 

而不是

  if (File.Exists(filePath))

答案 3 :(得分:1)

File.Exists(filePath)更改为!File.Exists(filePath) 甚至更好,总是使用追加模式。如果文件不存在,它将创建文件

答案 4 :(得分:0)

在我看来if和else语句必须相反,不是吗?

现在您创建文件(如果存在),并在文件不存在时添加。 (如果该文件尚不存在,则附加也会创建该文件。)