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

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

If

相关标签:
3条回答
  • 2020-12-06 16:38

    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.

    0 讨论(0)
  • 2020-12-06 16:54

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

    See this answer to a related question.

    0 讨论(0)
  • 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<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();
            }
        }
    
    0 讨论(0)
提交回复
热议问题