您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

2026-03-30 13:541阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计507个文字,预计阅读时间需要3分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

一、前言:近期在搜集创新案例

二、内容摘要:

1.案例一:某企业通过技术创新,实现了产品性能的显著提升。

2.案例二:一位设计师运用新材料,打造出独特的设计作品。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

3.案例三:一位科研团队突破传统技术,研发出新型环保材料。

一、前言

最近在搞C#的winform窗体应用,需要监听Console日志写入本地日志,类似Unity的Application.logMessageReceviedThreaded。

二、具体实现

1、原理

Console提供了一个SetOut接口,传入一个TextWriter,即可通过TextWriter重写Write和WriteLine接口,将日志写入我们的日志文件了。

public static void SetOut(TextWriter newOut);

2、具体实现

自己创建一个类,比如LoggerTextWriter,它继承TextWriter,重写Write和WriteLine接口,写入日志到本地。

LoggerTextWriter logSW = new LoggerTextWriter("./");
logSW.Init();
Console.SetOut(logSW);

Console.WriteLine("Hello Wrold");

其中LoggerTextWriter代码如下

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public class LoggerTextWriter : TextWriter
{
private string m_outputLogPath;

public LoggerTextWriter (string launcherDir) : base()
{
m_outputLogPath = Path.Combine(launcherDir, "output.log");
}

public override Encoding Encoding { get { return Encoding.UTF8; } }

public override void Write(string value)
{
WriteLog(value);
}
public override void WriteLine(string value)
{
WriteLog(value);
}
public override void Close()
{
base.Close();
}

public void Init()
{
if (File.Exists(m_outputLogPath))
{
File.Delete(m_outputLogPath);
}
}

public void WriteLog(string msg)
{
try
{
FileStream fs;
StreamWriter sw;
StringBuilder sbr = new StringBuilder(16);

if (!File.Exists(m_outputLogPath))
{
fs = new FileStream(m_outputLogPath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
sw = new StreamWriter(fs, Encoding.UTF8);
sbr.Append("日志开始");
sbr.AppendLine();
}
else
{
fs = new FileStream(m_outputLogPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
sw = new StreamWriter(fs, Encoding.UTF8);
}
sbr.Append("[");
sbr.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
sbr.Append("]: ");
sbr.Append(msg);
sw.WriteLine(sbr.ToString());

sw.Flush();
sw.Close();
fs.Close();
sbr.Clear();
}
catch (Exception)
{
throw;
}
}
}


本文共计507个文字,预计阅读时间需要3分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

一、前言:近期在搜集创新案例

二、内容摘要:

1.案例一:某企业通过技术创新,实现了产品性能的显著提升。

2.案例二:一位设计师运用新材料,打造出独特的设计作品。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

3.案例三:一位科研团队突破传统技术,研发出新型环保材料。

一、前言

最近在搞C#的winform窗体应用,需要监听Console日志写入本地日志,类似Unity的Application.logMessageReceviedThreaded。

二、具体实现

1、原理

Console提供了一个SetOut接口,传入一个TextWriter,即可通过TextWriter重写Write和WriteLine接口,将日志写入我们的日志文件了。

public static void SetOut(TextWriter newOut);

2、具体实现

自己创建一个类,比如LoggerTextWriter,它继承TextWriter,重写Write和WriteLine接口,写入日志到本地。

LoggerTextWriter logSW = new LoggerTextWriter("./");
logSW.Init();
Console.SetOut(logSW);

Console.WriteLine("Hello Wrold");

其中LoggerTextWriter代码如下

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public class LoggerTextWriter : TextWriter
{
private string m_outputLogPath;

public LoggerTextWriter (string launcherDir) : base()
{
m_outputLogPath = Path.Combine(launcherDir, "output.log");
}

public override Encoding Encoding { get { return Encoding.UTF8; } }

public override void Write(string value)
{
WriteLog(value);
}
public override void WriteLine(string value)
{
WriteLog(value);
}
public override void Close()
{
base.Close();
}

public void Init()
{
if (File.Exists(m_outputLogPath))
{
File.Delete(m_outputLogPath);
}
}

public void WriteLog(string msg)
{
try
{
FileStream fs;
StreamWriter sw;
StringBuilder sbr = new StringBuilder(16);

if (!File.Exists(m_outputLogPath))
{
fs = new FileStream(m_outputLogPath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
sw = new StreamWriter(fs, Encoding.UTF8);
sbr.Append("日志开始");
sbr.AppendLine();
}
else
{
fs = new FileStream(m_outputLogPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
sw = new StreamWriter(fs, Encoding.UTF8);
}
sbr.Append("[");
sbr.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
sbr.Append("]: ");
sbr.Append(msg);
sw.WriteLine(sbr.ToString());

sw.Flush();
sw.Close();
fs.Close();
sbr.Clear();
}
catch (Exception)
{
throw;
}
}
}