IO操作输出csv文件
csv对应excel文件
using System.IO;
StreamWriter sw = new StreamWriter(@"H:\UnityProject\jieKou2.2\web\test.csv");
sw.WriteLine("{0},{1}", movePoint.X, movePoint.Y);
sw.Flush();
sw.Close();
log4net写日志
step0:引用log4net包
直接在nuget找到log4net包。不能加载出来的话,直接去nuget官网搜索包log4net,下载package文件。放到本地库(自己新建一个文件夹存放)。然后工具,选项,nuget 管理。
- 接下来:工具:NuGet工具包管理器,选择并安装之前下载的包
安装成功后:
step1: 在AssemblyInfo.cs中添加配置文件跟log4net的实例化函数config绑定。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] //绑定配置文件
step2:
配置文件名称:log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<!--错误日志类-->
<logger name="logerror">
<!--日志类的名字-->
<level value="ALL" />
<!--定义记录的日志级别-->
<appender-ref ref="ErrorAppender" />
<!--记录到哪个介质中去-->
</logger>
<!--信息日志类-->
<logger name="loginfo">
<level value="ALL" />
<appender-ref ref="InfoAppender" />
</logger>
<!--错误日志附加介质-->
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<param name="File" value="Log\\LogError\\" />
<!--日志输出到exe程序这个相对目录下-->
<param name="AppendToFile" value="true" />
<!--输出的日志不会覆盖以前的信息-->
<param name="MaxSizeRollBackups" value="100" />
<!--备份文件的个数-->
<param name="MaxFileSize" value="10240" />
<!--当个日志文件的最大大小-->
<param name="StaticLogFileName" value="false" />
<!--是否使用静态文件名-->
<param name="DatePattern" value="yyyyMMdd".htm"" />
<!--日志文件名-->
<param name="RollingStyle" value="Date" />
<!--文件创建的方式,这里是以Date方式创建-->
<!--错误日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" />
</layout>
</appender>
<!--信息日志附加介质-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogInfo\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd".htm"" />
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" />
</layout>
</appender>
</log4net>
</configuration>
step3:更改配置文件属性
step4:
自己封装一个LogHelper控制类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 草稿
{
public class LogHelper
{
public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
public static void WriteLog(string info)
{
if (loginfo.IsInfoEnabled)
{
loginfo.Info(info);
}
}
public static void WriteLog(string info, Exception ex)
{
if (logerror.IsErrorEnabled)
{
logerror.Error(info, ex);
}
}
}
}
step5:使用
LogHelper.WriteLog("vincent test info"); //简单使用
//抛异常
try
{
string a = "FF";
int b = Convert.ToInt32(a);
}
catch (Exception ex){
LogHelper.WriteLog(ex.Message.ToString(), ex);
}
使用Newtonsoft.Json库解析json串
- 添加引用:程序集:Newtonsoft.Json
- using Newtonsoft.Json;
- 代码
BookInfo book1 = new BookInfo()
{
BookId = 1,
Category = "CHILDREN",
Title = "Harry Potter",
Author = "J K. Rowling",
PublishDate = new DateTime(2005, 08, 15),
Price = 29.99
};
string bookListJson = JsonConvert.SerializeObject(book1); //把对象转为json
BookInfo book2 = JsonConvert.DeserializeObject<BookInfo>(bookListJson); //把json串解析为对象
代理,绑定事件,绑定函数
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler Activated;
Activated += new EventHandler(app_Activated);
代理:
1.代理 相当于 一个函数指针,等于存放了一种相同参数函数的指针。
//public delegate void DeathDelegate();
delegate void DelegateExample(int a);
start()
{
DelegateExample myDelegate=Bar;
myDelegate(777); //这样就执行了Bar函数
}
Bar(int a)
{
}
2.代理作为参数
delegate void DelegateExample(int a);
void start()
{
Foobar(Bar);
}
void Foobar(DelegateExample myDelegate2)
{
myDelegate2(50);//这样 也执行了 Bar 函数
}
Bar(int a)
{
}
导入三方控件
step1:安装exe文件,
step2:工具->选择工具箱项->com组件->
选择之后控件出现在工具箱中
若 Form1 中的函数,需要再form2中调用
Step1
再form1 中声明 要被调用的函数:
void f_ChangeColor(bool topmost)
{
this.BackColor = Color.LightBlue;
//this.Text = “改变成功”;
}
Step2
在form1 中创建form2的时候,绑定函数
Form2 f = new Form2();
f.ChangeColor += new Form2.ChangeFormColor(f_ ChangeColor);
f.Show();
其中的ChangeFormColor 会代替原来的f_ ChangeColor函数。
Step3
在form2中。
public delegate void ChangeFormColor(bool topmost);
public event ChangeFormColor ChangeColor; // ChangeColor===form1中的void f_ChangeColor(bool topmost)
设置代理 和事件。
Step4:
Form2中调用函数 等价于调用form1中的函数。
ChangeColor(true);//执行委托实例
加载服务器图片
pictureUrl = mRobotListRequestClass.data.icon;
System.Net.WebRequest webreq = System.Net.WebRequest.Create(pictureUrl);
System.Net.WebResponse webres = webreq.GetResponse();
using (System.IO.Stream stream = webres.GetResponseStream())
{
this.pictureBox1.Image = Image.FromStream(stream);
}