主要介绍datatable、日志log、文件流filestream、streamwriter类,将数据保存为txt和excel格式。
1.创建testdatatable类
createtable()方法创建一个数据table,savetabletoexcel(string filename)方法将数据table存为文件名为filename的excel格式文件,createdirectory(string filename)方法去检查文件是否存在,若不存在,则自动创建一个。
class testdatatable: datatable
{ public void createtable()
{ this.columns.add("time(s)", system.type.gettype("system.string")); this.columns.add("ch", system.type.gettype("system.string"));
this.columns.add("ber", system.type.gettype("system.string"));
const int length1 = 4;
const int length2 = 10; int[][] data = new int[length1][]; //第一条数据
data[0] = new int[length2] { 13, 25, 21, 33, 28, 39, 43, 36, 42, 36 }; //第二条数据
data[1] = new int[length2] { 20, 13, 10, 5, 15, 7, 10, 14, 19, 20 }; //第三条数据
data[2] = new int[length2] { 78, 92, 65, 83, 90, 59, 63, 72, 88, 98 }; //第四条数据
data[3] = new int[length2] { 45, 49, 39, 47, 52, 76, 67, 51, 57, 67 }; for (int i = 0; i < length2; i++)
{ for (int j = 0; j < length1; j++)
{
datarow dr = this.newrow();
dr[0] = i + 1;
dr[1] = j;
dr[2] = data[j][i]; this.rows.add(dr);
}
}
} public void savetabletoexcel(string filename)
{
createdirectory(filename);
stringbuilder title = new stringbuilder();
filestream filestream = new filestream(filename, filemode.openorcreate);
streamwriter writer = new streamwriter(new bufferedstream(filestream), system.text.encoding.default);
for (int i = 0; i < this.columns.count; i++)
{
title.append(this.columns[i].columnname + "\t"); //栏位:自动跳到下一单元格
}
title.append("\n");
writer.write(title); foreach (datarow row in this.rows)
{
stringbuilder content = new stringbuilder(); for (int i = 0; i < this.columns.count; i++)
{
content.append(row[i] + "\t");//内容:自动跳到下一单元格
}
content.append("\n");
writer.write(content);
}
writer.close();
filestream.close();
} public void createdirectory(string filename)
{
directoryinfo directoryinfo = directory.getparent(filename);
if (!directoryinfo.exists)
{
directoryinfo.create();
}
}
}
2.创建日志log类
将文件名filename定义为类的属性,在构造函数时赋值。savelogtotxt(string info)方法将数据info存入文件名为filename的txt文件中。同样createdirectory()方法去检查文件是否存在
class log
{ private string filename;
public string filename
{ set
{ this.filename = value;
} get
{ return this.filename;
}
} public log(string filename)
{ this.filename = filename;
createdirectory();
}
public void savelogtotxt(string info)
{
streamwriter writer = null;
filestream filestream = null; try
{
system.io.fileinfo fileinfo = new system.io.fileinfo(this.filename);
if (!fileinfo.exists)
{
filestream = fileinfo.create();
writer = new streamwriter(filestream);
}
else
{
filestream = fileinfo.open(filemode.append, fileaccess.write);
writer = new streamwriter(filestream);
}
writer.writeline(info);
}
finally
{
if (writer != null)
{
writer.close();
writer.dispose();
filestream.close();
filestream.dispose();
}
}
}
public void createdirectory()
{
directoryinfo directoryinfo = directory.getparent(this.filename);
if (!directoryinfo.exists)
{
directoryinfo.create();
}
}
}
3.调用类方法存数据
实例化类、创建数据table,将table保存为txt格式和excel格式,以时间命名。
testdatatable dt = new testdatatable();
dt.createtable();
dt.rows.clear(); //清除数据table里所有行datetime starttime = datetime.now;
log log = new log(@"log\" + starttime.tostring("yyyymmddhhmmss") + ".txt");//以时间为文件命名,存在exe所在文件夹下的log文件夹里for (int i = 0; i < 4; i++)
{
datarow dr = dt.newrow();
dr[0] = (int)second;
dr[1] = i;
dr[2] = berbychannel[i].tostring("e2");
dt.rows.add(dr);//添加新行到数据table
string info = string.format("{0}: time(s): {1}, ch: {2}, ber: {3}", datetime.now, dr[0], dr[1], dr[2]);
log.savelogtotxt(info);//存为txt格式 }//存为excel格式string filename = @"testrecord\" + starttime.tostring("yyyymmddhhmmss") + ".xls";
dt.savetabletoexcel(filename);//以时间为文件命名,存在exe所在文件夹下的testrecord文件夹里
以上就是 从0自学c#03--文件流保存数据为txt/excel格式的内容。