您好,欢迎访问一九零五行业门户网

从0自学C#03--文件流保存数据为txt/excel格式

主要介绍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格式的内容。
其它类似信息

推荐信息