C#将Console写至文件,且文件固定最大长度

参考文章
将C#的Console.Write同步到控制台和log文件输出

业务需求

在生产环境中,控制台窗口不便展示出来。
为了在生产环境中,完整记录控制台应用的输出,选择将其输出到文件中。
但是,一次性存储所有输出的话,文件会很大,阅读体验不佳。
故而本项目实现:

将控制台输出到文件。
限定输出文件的最大长度。

代码

using System;
using System.IO;
using System.Text;
class Program
{static void Main(){Console.SetOut(new WrtToFile(@"D:\LearnOutput.txt", 15));Console.WriteLine("testing 1-2-301");Console.WriteLine("t");Console.WriteLine("testing 4-5-6712");//Console.ReadLine();}public class WrtToFile : TextWriter{private int maxLen = 0;                 // 设定的文件最大保存长度private int fileCount = 1;              // 当前操作第几个文件,文件计数private int wordCount = 0;              // 当前文件的字数private string pathFormat = null;       // 可以根据文件计数打开的文件路径,待填充private string path = null;             // 文件路径,已填充private StreamWriter fileWriter = null; // 文件写入对象/// <summary>/// </summary>/// <param name="defaultPath">文件路径</param>/// <param name="maxLen">默认最多65535个字符,约131M大小</param>public WrtToFile(string defaultPath, int maxLen = UInt16.MaxValue){pathFormat = Path.Combine(Path.GetDirectoryName(defaultPath), Path.GetFileNameWithoutExtension(defaultPath) + "{0}" + Path.GetExtension(defaultPath));this.maxLen = maxLen;}/// <summary>/// 选择输出目标文件/// </summary>/// <param name="length">待输出字符串的长度</param>public void SelectTarget(int length){if (length + wordCount > maxLen || 0 == wordCount)    // 满了新建,或者第一次建{try{if (!(fileWriter is null)){	// 如果有文件正在使用,则关闭之fileWriter.Close();fileWriter.Dispose();}while (File.Exists(path = string.Format(pathFormat, fileCount)))fileCount++;            // 新建文件名后缀wordCount = 0;              // 清空字长// 创建文件流fileWriter = new StreamWriter(path, true, Encoding.UTF8) { AutoFlush = true };}catch { }}wordCount += length;       // 追加}/// <summary>/// 覆盖写的方法/// </summary>/// <param name="content"></param>public override void WriteLine(string content){SelectTarget(content.Length);fileWriter.WriteLine(content);}/// <summary>/// 需实现抽象类的此方法/// </summary>public override Encoding Encoding{get { return fileWriter.Encoding; }}}
}

第一次运行结果

三个文件各一行
在这里插入图片描述

第二次运行结果

六个文件各一行
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/300515.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion介绍

Stable Diffusion是一种前沿的开源深度学习模型框架&#xff0c;专门设计用于从文本描述生成高质量的图像。这种称为文本到图像生成的技术&#xff0c;利用了大规模变换器&#xff08;transformers&#xff09;和生成对抗网络&#xff08;GANs&#xff09;的力量&#xff0c;以…

五分钟快速搭建五金行业小程序商城教程解析

作为五金行业的从业者&#xff0c;你可能想要拓展线上业务&#xff0c;提供更方便快捷的购物体验给顾客。而小程序商城成为了一种非常受欢迎的方式。但是&#xff0c;你可能觉得不懂代码无法实现这样的小程序商城。现在&#xff0c;我将通过以下步骤&#xff0c;教你如何在五分…

Github项目推荐-ChatGPT-Admin-Web

项目地址 https://github.com/AprilNEA/ChatGPT-Admin-Web 项目简介 通过api接入大模型&#xff0c;并基于此封装了一层用户管理的功能&#xff0c;适合团队内使用。 项目截图

Vue基础知识:Vue路由——重定向,以及?(可选符)的使用

当网页打开时&#xff0c;url默认是/路径&#xff08;根路径&#xff09;&#xff0c;未匹配到组件时&#xff0c;会出现空白&#xff0c;为了解决这个问题 就要利用重定向 重定向&#xff1a;匹配path后&#xff0c;强制跳转path路径 重定向的语法&#xff1a; {path:匹配…

爬虫实战一、Scrapy开发环境(Win10+Anaconda3)搭建

#前言 在这儿推荐使用Anaconda进行安装&#xff0c;并不推荐大家用pythonpip安装&#xff0c;因为pythonpip的坑实在是太多了。 #一、环境中准备&#xff1a; Win10&#xff08;企业版&#xff09;Anaconda3-5.0.1-Windows-x86_64&#xff0c;下载地址&#xff0c;如果打不开…

易宝OA GetProductInv SQL注入漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA /SmartTradeScan/Inventory/GetProductInv 接口处存在SQL注入漏洞,未经身份…

nodejs应用程序不同部署环境下的差异配置方案

一、背景 nodejs应用程序&#xff0c;不同于java语言使用分布式配置&#xff0c;当部署于不同的环境里&#xff0c;因为环境的差异&#xff0c;配置项的值也不尽相同。 最常见的差异就是数据库的连接信息&#xff0c;而代码是一份&#xff0c;不能把生产环境的信息暴露在非生产…

day02 51单片机

51单片机学习 1闪烁LED 1.1 需求描述 这个案例,我们要让P00引脚对应的LED按照1秒闪烁1次。 1.2 硬件设计 1.1 软件设计 1)LED闪烁的代码 想让LED闪烁,就需要P00的值不断在0和1之间循环变化。实现这一功能的代码也很简单: #include <STC89C5xRC.H> //包含STC89…

xss【2】

1.xss钓鱼 钓鱼攻击利用页面&#xff0c;fish.php黑客钓鱼获取到账号密码存储的位置 xss进行键盘记录 2.xss常规防范 3.xss验证payload XSS&#xff08;跨站攻击&#xff09;_details/open/ontoggle-CSDN博客

数据结构(3)----栈和队列

目录 一.栈 1.栈的基本概念 2.栈的基本操作 3.顺序栈的实现 •顺序栈的定义 •顺序栈的初始化 •进栈操作 •出栈操作 •读栈顶元素操作 •若使用另一种方式: 4.链栈的实现 •链栈的进栈操作 •链栈的出栈操作 •读栈顶元素 二.队列 1.队列的基本概念 2.队列的基…

Annaconda的替代品miniforge!

用了多年的Annaconda竟然要收费了&#xff08;个人不收费&#xff0c;企业收费&#xff0c;但个人电脑在企业IP下&#xff0c;还是被警告了&#xff09;&#xff0c;只能用miniforge 全面替换了&#xff01; 一、卸载anaconda windows下卸载&#xff0c; 设置 -> 应用和功…

【算法】动态规划练习(一)

目录 1137. 第 N 个泰波那契数 分析 代码 面试题 08.01. 三步问题 分析 代码 746. 使用最小花费爬楼梯 分析 代码 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波…

C++进阶篇11---IO流

一、对C语言的输入输出的理解 C语言中我们经常用scanf()和printf()进行输入输出&#xff0c;形象的描述它们的作用如下 对于缓冲区的理解&#xff1a; 可以屏蔽掉低级I/O的实现&#xff0c;低级I/O的实现依赖操作系统本身内核的实现&#xff0c;所以如果能够屏蔽这部分的差异…

基于PHP的校园招聘管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园招聘管理系统 一 介绍 此校园招聘管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为个人用户&#xff0c;企业和管理员三种。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二…

蓝桥杯第十四届C++C组

目录 三国游戏 填充 翻转 【单调队列优化DP】子矩阵 【快速幂、欧拉函数】互质数的个数 【tire树】异或和之差 【质因数分解】公因数匹配 子树的大小 三国游戏 题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都…

C语言整数和小数的存储

1.整数在内存中的存储 计算机使用二进制进行存储、运算&#xff0c;整数在内存中存储使用的是二进制补码 1.1原码、反码、补码 整数的2进制表⽰⽅法有三种&#xff0c;即 原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分&#xff0c;符号位都是⽤0表⽰“正”&am…

Qt实现无边框圆角窗口

我们在使用QDialog的时候许多场景下都不需要默认的标题栏&#xff0c;这时候我们需要设置他的标志位。 this->setWindowFlags(Qt::FramelessWindowHint);由于现代的窗口风格&#xff0c;我们一般会设置窗口为圆角边框的样式&#xff0c;我们可以使用qss的方式来进行设置。 …

汇编——SSE打包整数

SSE也可以进行整数向量的加法&#xff0c;示例如下&#xff1a; ;sse_integer.asm extern printfsection .datadummy db 13 align 16pdivector1 dd 1dd 2dd 3dd 4pdivector2 dd 5dd 6dd 7dd 8fmt1 db "Packed Integer Vector 1: %d, %d, %d, %d",…

提升团队工程交付能力,从“看见”工程活动和研发模式开始

作者&#xff1a;张裕、雅纯 理想中的研发团队应当具有以下特征&#xff1a; 总是工作在最高优先级的事项上 理想的研发团队能够识别并始终集中精力在当前最紧迫和最有价值的任务上。这需要团队具备出色的项目管理能力和决策能力&#xff0c;以便能够正确评估优先级&#xff0…

Ant Design Vue

Ant Design Vue是一个由阿里巴巴团队打造的Vue组件库&#xff0c;它以其优雅的设计和丰富的功能集成而被广泛使用。以下是对Ant Design Vue的简单介绍&#xff1a; 首先&#xff0c;Ant Design Vue采用了精良的设计风格&#xff0c;为用户提供了简约、美观的界面&#xff0c;符…