黑马程序员技术交流社区

标题: 关于数据写入问题 [打印本页]

作者: guoguo    时间: 2013-11-28 16:23
标题: 关于数据写入问题
本帖最后由 guoguo 于 2013-11-28 18:34 编辑

我在visual studio 建了一个简单的控制台程序,在d:\我的文档\Visual Studio 2005\Projects\test\01\bin\Debug根目录下建立了一个test.txt文档,用的是相对路径,
编写了一下代码:可是显示插入成功,但是打开文档并没有数据,但是第二种代码就插入进去了数据,问一下,有什么区别,另外,第一种怎样改动,才能正常插入数据?而且,虽然第二种方式插入了一行数据,可是当下次改动是,显示的是新插入的信息,以前的信息就会不见了???

第一种代码:using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "我的第一行文字";
            FileStream filestream = File.OpenWrite("test.txt");
            StreamWriter sw = new StreamWriter(filestream);
            sw.WriteLine(text);
            Console.WriteLine("插入成功");
            Console.ReadKey();
                  }
    }
}


第二种实现代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "我的第一行字符";
            FileStream filestream = new FileStream("test.txt", FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(filestream);
            sw.WriteLine(text);
            Console.WriteLine("插入成功");
            sw.Close();
            Console.ReadKey();
        }
    }
}



作者: xydsdsr    时间: 2013-11-28 16:34
这是因为当程序没有退出时,执行写入操作,程序会把要写入的内容放入缓冲区内,攒到一定程度集中写入,当想要立即把文件写入,执行flush()方法,清除缓冲区,程序会立即缓冲区内的文件写入,在释放。close()方法也会执行flush()。

作者: guoguo    时间: 2013-11-28 16:58
哦,我明白了,第一种没有调用close()或者flush()方法,相当于没有执行数据插入,可是,我还是不明白,没什么再下次插入新数据之前文档中的旧数据不见了?????
作者: xydsdsr    时间: 2013-11-28 17:19
你调用的构造函数的问题
StreamWriter(Stream) 用 UTF-8 编码及默认缓冲区大小,为指定的流初始化 StreamWriter 类的一个新实例。一个参数应该默认是覆盖文本的
作者: guoguo    时间: 2013-11-28 18:34
我明白了,感谢你的答案!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2