为什么StreamWriter会覆盖我的文件?

Bxc*_*dsb 4 c# filestream streamwriter

我正在用SteamWriter文字文件写东西,但用新数据覆盖旧数据.如何确保它只是添加新数据而不是覆盖旧数据?
我的代码:

class Program
{
    const string filename = @"C:\log.txt";
    static void Main()
    {
        FileStream fs;
        fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
        StreamWriter writer = new StreamWriter(fs);
        writer.WriteLine("test");

        writer.Close();
        fs.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

Alv*_*ong 12

如果您使用FileMode.Create,根据MSDN:

指定操作系统应创建新文件.如果该文件已存在,则将被覆盖.这需要FileIOPermissionAccess.Write权限.FileMode.Create等同于请求如果文件不存在,则使用CreateNew; 否则,请使用截断.如果文件已存在但是是隐藏文件,则抛出UnauthorizedAccessException异常.

因此FileMode.Append,如果要将内容添加到文件末尾,则需要使用:

打开文件(如果存在)并搜索文件的末尾,或 创建新文件.这需要FileIOPermissionAccess.Append权限.FileMode.Append只能与FileAccess.Write一起使用.尝试在文件结束之前寻找某个位置会抛出IOException异常,并且任何读取尝试都会失败并抛出NotSupportedException异常.

FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
Run Code Online (Sandbox Code Playgroud)


Kar*_*hik 0

尝试这个

string path = your file path;
   using(StreamWriter sw = new StreamWriter(path,true))
           {

                    sw.WriteLine("string here");
           }
Run Code Online (Sandbox Code Playgroud)