C#Text Writer在文件的开头写入

时间:2016-04-04 10:43:42

标签: c#

我的类包含写入文件的构造函数方法

class Writer
    {
        public Writer(string filename, List<string> data)
        {
            FileStream ostrm;
            StreamWriter writer;
            TextWriter oldOut = Console.Out;
            try
            {
                ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.OpenOrCreate, FileAccess.Write);
                writer = new StreamWriter( ostrm );
            }
            catch (Exception e)
            {
                Console.WriteLine("Cannot open " + filename + ".txt for writing");
                Console.WriteLine(e.Message);
                return;
            }


 Console.SetOut(writer);
            foreach (var _data in data)
            {
                Console.WriteLine( _data );
            }
            Console.SetOut(oldOut);
            writer.Close();
            ostrm.Close();
        }
    }

在我的主要方法中:

List<string> dataToAdd = new List<string>();
dataToAdd.Add("Example");
new Writer(Settings.ConferenceRoomName, dataToAdd);

但是,如果我已在文件中包含文本,而是从最后一行追加到该文件,则从第一行开始,即:

Example // new added through method
Line that already exists // already in file
Line that already exists // already in file
// this is where I wanted it but it goes to the top

任何帮助都会受到赞赏,我不知道我可以在哪里找到开始写作的行。

提前致谢。

3 个答案:

答案 0 :(得分:3)

当您使用FileStream创建新的FileMode.OpenOrCreate时,它会覆盖现有文件。如果您要附加到该文件,请改为使用FileMode.Append

  

FileMode.Append:打开文件(如果存在)并搜索到文件末尾,或创建新文件。这需要FileIOPermissionAccess.Append权限。

ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.Append, FileAccess.Write);

答案 1 :(得分:3)

您需要使用OpenOrCreate代替ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.Append, FileAccess.Write);

FileMode.Append

请参阅MSDN(关于{{1}}):

  

打开文件(如果存在)并搜索到文件末尾,或创建新文件。这需要FileIOPermissionAccess.Append权限。 FileMode.Append只能与FileAccess.Write ...

一起使用

因此,如果文件不存在,它也会创建文件 如果您不想创建不存在的文件,可以在打开流之前使用File.Exists()检查它是否存在。

答案 2 :(得分:1)

您需要文件模式Append而不是OpenOrCreate

ostrm = new FileStream("C:/Users/kyle/Desktop/ConferenceSoftware/" + filename + ".txt", FileMode.Append, FileAccess.Write);

如果它不存在,两者都会创建一个新文件,不同之处在于OpenOrCreate开始在文件的开头写入,Append开始在文件末尾写入。

参考:FileMode Enumeration