FileStream and StreamWriter - How to truncate the remainder of the file after writing?

前端 未结 3 379
無奈伤痛
無奈伤痛 2020-12-06 16:26
var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
    writer.Write(....);

If

3条回答
  •  Happy的楠姐
    2020-12-06 16:54

    This code will truncate part of the log file, if the file grows above 1 MB.

    using (FileStream fs = File.Open("C:\\LogFile.txt", FileMode.OpenOrCreate))
            {
                int OneMB = 1000000;
    
                fs.Seek(0, SeekOrigin.Begin);
                if (fs.Length > OneMB)
                { 
                    int fileByte = 1;
                    fs.Position  = fs.Seek(fs.Length / 2, SeekOrigin.Begin);
                    List bytes = new List();
    
                    while (fileByte > 0)
                    {
                       fileByte = fs.ReadByte();
                       bytes.Add((byte)fileByte);
                    }
    
                    fs.SetLength(0);
                    fs.Position = 0;
                    fs.Write(bytes.ToArray(), 0, bytes.Count());
    
                    fs.Seek(0, SeekOrigin.End);
                    var stringBytes =  UTF8Encoding.ASCII.GetBytes($"Test1" + Environment.NewLine);
                    fs.Write(stringBytes, 0, stringBytes.Length);  
                }
                else
                {
                    fs.Seek(0, SeekOrigin.End);
                    var stringBytes = UTF8Encoding.ASCII.GetBytes($"Test2" + Environment.NewLine);
                    fs.Write(stringBytes, 0, stringBytes.Length); 
                }
    
                fs.Flush();
            }
        }
    

提交回复
热议问题