How can I remove the oldest lines in a file when using a FileStream and StreamWriter?

后端 未结 2 1194
误落风尘
误落风尘 2021-01-29 08:21

Based on Prakash\'s answer here, I thought I\'d try something like this to remove the oldest lines in a file prior to adding a new line to it:

private ExceptionL         


        
相关标签:
2条回答
  • 2021-01-29 09:04

    ReadAllLines and WriteAllLines are just hiding a loop from you. Just do:

    StreamReader reader = new StreamReader(_fileStream);
    List<String> logList = new List<String>();
    
    while (!reader.EndOfStream)
       logList.Add(reader.ReadLine());
    

    Note that this is nearly identical to the implementation of File.ReadAllLines (from MSDN Reference Source)

           String line;
            List<String> lines = new List<String>();
    
            using (StreamReader sr = new StreamReader(path, encoding))
                while ((line = sr.ReadLine()) != null)
                    lines.Add(line);
    
            return lines.ToArray();
    

    WriteAllLines is simialr:

    StreamWriter writer = new StreamWriter(path, false); //Don't append!
    foreach (String line in logList)
    {
       writer.WriteLine(line);
    }
    
    0 讨论(0)
  • 2021-01-29 09:16

    I would write simple extension methods for this, that do the job lazily without loading whole file to memory.

    Usage would be something like this:

    outfile.MyWriteLines(infile.MyReadLines().Skip(1));
    

    public static class Extensions
    {
        public static IEnumerable<string> MyReadLines(this FileStream f)
        {
            var sr = new StreamReader(f);
    
            var line = sr.ReadLine();
            while (line != null)
            {
                yield return line;
                line = sr.ReadLine();
            }
        }
    
        public static void MyWriteLines(this FileStream f, IEnumerable<string> lines)
        {
            var sw = new StreamWriter(f);
            foreach(var line in lines)
            {
                sw.WriteLine(line);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题