gpt4 book ai didi

c# - System.IO.IOException C# 当 FileInfo 和 WriteAllLines

转载 作者:太空狗 更新时间:2023-10-30 01:33:49 24 4
gpt4 key购买 nike

如果我的文本日志文件的大小大于最大值,我想清理它:

FileInfo f = new FileInfo(filename);
if (f.Length > 30*1024*1024)
{
var lines = File.ReadLines(filename).Skip(10000);
File.WriteAllLines(filename, lines);
}

但我有异常(exception)

System.IO.IOException: The process cannot access the file '<path>' because it is being used by another process.

问题:

  1. 在以后使用文件之前,我是否需要关闭 FileInfo 对象?
  2. 有没有更合适的方法来轮换日志? (例如获取行数而不是字节大小的有效方法?)

最佳答案

File.ReadLines保持文件打开,直到您处理返回的 IEnumerable<string> .

所以这与FileInfo无关.

如果需要写回同一个文件,完整枚举内容:

var lines = File.ReadLines(filename).Skip(10000).ToList();

您提到“旋转日志”,您是否考虑过旋转文件? IE。写入一个固定文件,当它变得“满”时(根据您认为满的任何标准,例如 1GB 大小、一天的日志条目、100.000 行等),您重命名该文件并创建一个新的、空的、一个。

您可能还想重命名现有的旋转文件,以保持较低的旋转文件数量。

关于c# - System.IO.IOException C# 当 FileInfo 和 WriteAllLines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32548716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com