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

妖精的绣舞 提交于 2019-11-29 09:11:56
Oded

Use SetLength to set the new length of the file - the file should get truncated.

See this answer to a related question.

you could try writer.BaseStream.SetLength(writer.BaseStream.Position) although I'm not sure how well that would work.

For a FileStream I think that should truncate the file to the current position.

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<byte> bytes = new List<byte>();

                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();
        }
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!