如何在c#中截断文件?

use*_*246 13 .net c# truncate file

我正在使用Trace.Writeln()函数将C#中的程序执行的操作写入文件.但是文件变得太大了.如何在文件增长到1MB时截断它?

TextWriterTraceListener traceListener = new TextWriterTraceListener(File.AppendText("audit.txt"));
Trace.Listeners.Add(traceListener);
Trace.AutoFlush = true;
Run Code Online (Sandbox Code Playgroud)

应该添加到上面的块中

sll*_*sll 35

尝试使用FileStream.SetLength

FileStream fileStream = new FileStream(...);
fileStream.SetLength(sizeInBytesNotChars);
Run Code Online (Sandbox Code Playgroud)


Ste*_*end 9

关闭该文件,然后使用FileMode.Truncate重新打开它.

某些日志实现在重新打开之前将旧文件归档为旧名称,以保留更大的数据集而不会使任何文件变得太大.


Pau*_*ier 7

与自己尝试这样做相反,我真的建议使用像log4net这样的东西; 它内置了很多这种有用的功能.

  • 由于你实际上没有回答这个问题,这应该是一个评论. (7认同)
  • @Gabe:我认为回答OP的陈述方法显示效率低下并提出替代方法的问题不是一个不恰当的答案. (3认同)
  • 好的答案显示代码或链接到要使用的特定功能.如果您希望这是一个很好的答案,请说明如何使用log4net来执行OP所要求的操作. (3认同)

小智 5

当文件超过500000字节时,它将从文件中删除250000字节的开头,因此剩余的文件长度为250000字节.

FileStream fs = new FileStream(strFileName, FileMode.OpenOrCreate);
        if (fs.Length > 500000)
        {
            // Set the length to 250Kb
            Byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, (int)fs.Length);
            fs.Close();
            FileStream fs2 = new FileStream(strFileName, FileMode.Create);
            fs2.Write(bytes, (int)bytes.Length - 250000, 250000);
            fs2.Flush();
        } // end if (fs.Length > 500000) 
Run Code Online (Sandbox Code Playgroud)

  • 这会将整个文件读入内存.如果它真的很大,那就不理想了. (3认同)