using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Collections; using System.Text; using System.Web; using System.Windows.Forms; using System.Net; namespace Print.BLL { #region save txt 类说明信息 /// <summary> /// <DL> /// <DT><b>读CSV文件类,读取指定的CSV文件,可以导出DataTable</b></DT> /// <DD> /// <UL> /// </UL> /// </DD> /// </DL> /// <Author>yangzhihong</Author> /// <CreateDate>2006/01/16</CreateDate> /// <Company></Company> /// <Version>1.0</Version> /// </summary> #endregion public class TxtStreamWriter { private string fileName; //文件名 public string FileName { get { return fileName; } set { fileName = value; } } private Encoding encoding; //编码 public Encoding Encoding { get { return encoding; } set { encoding = value; } } public TxtStreamWriter() { this.FileName = String.Empty; this.Encoding = Encoding.Default; } /// <summary> /// /// </summary> /// <param name="fileName">文件名,包括文件路径</param> public TxtStreamWriter(string fileName) { this.FileName = fileName; //this.Encoding = Encoding.Default; this.Encoding = System.Text.Encoding.Unicode; } /// <summary> /// /// </summary> /// <param name="fileName">文件名,包括文件路径</param> /// <param name="encoding">文件编码</param> public TxtStreamWriter(string fileName, Encoding encoding) { this.FileName = fileName; this.Encoding = encoding; } /// <summary> /// 导出DataTable中的数据到CSV文件 /// </summary> /// <param name="dt">DataTable</param> public void ExportToCsv(DataTable dt) { SaveFileDialog dlg = new SaveFileDialog(); // 筛选 dlg.Filter = "CSV文件(*.csv)|*.csv|文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"; // 使文件对话框将其当前目录还原为用户更改目录以搜索文件之前的初始值 dlg.RestoreDirectory = true; //dlg.InitialDirectory = "C://"; dlg.FileName = FileName; // 是否确定导出 if (dlg.ShowDialog() == DialogResult.Cancel) { return; } else { TextWriter writer = null; try { string text = ""; // 使用指定编码和缓冲区大小,为指定路径上的指定文件初始化 StreamWriter 类的新实例。 // 如果该文件存在,则可以将其覆盖或向其追加。如果该文件不存在,则此构造函数将创建一个新文件。 writer = new StreamWriter(dlg.FileName, false, Encoding); // 在第一行写入表名 //writer.WriteLine("CSV文件"); DataTable tb = dt; // 取得列的个数 int count = tb.Columns.Count-1; //-1:不保存TXNTIME列 string[] fields = new string[count]; // 循环添加列名 for (int i = 0; i < count; i++) { DataColumn column = tb.Columns[i]; fields[i] = column.ColumnName; } text = string.Join(",", fields); writer.WriteLine(text); // 遍历行 foreach (DataRow row in tb.Rows) { // 给每一行添加列单元 for (int i = 0; i < count; i++) { if (row[i] == null) { fields[i] = String.Empty; continue; } if (row[i] == DBNull.Value) { fields[i] = String.Empty; continue; } string field = row[i].ToString(); // CSV格式有规定,比如,如果字段中有逗号、双引号、回车换行符、前或后置空格, // 必须把字段用双引号扩起来,如果文本中有双引号,必须用两个双引号替换 field = field.Replace("/"", "/"/""); if (field.IndexOf(',') >= 0) { fields[i] = string.Format("/"{0}/"", field); continue; } if (field.IndexOf('/r') >= 0) { fields[i] = string.Format("/"{0}/"", field); continue; } if (field.IndexOf('/n') >= 0) { fields[i] = string.Format("/"{0}/"", field); continue; } if (field.IndexOf('/"') >= 0) { fields[i] = string.Format("/"{0}/"", field); continue; } if (field != field.Trim()) { fields[i] = string.Format("/"{0}/"", field); continue; } fields[i] = row[i].ToString(); } text = string.Join(",", fields); writer.WriteLine(text); } MessageBox.Show("导出成功", "提示"); } catch (Exception ex) { MessageBox.Show("导出失败" + ex.Message, "提示"); return; } finally { if (writer != null) { writer.Close(); } } } } /// <summary> /// 导出DataTable中的数据到txt文件 /// </summary> /// <param name="table">source datatable</param> /// <returns></returns> public bool ExportToTxt(System.Data.DataTable table) { try { table.Columns.RemoveAt(table.Columns.Count-1);// 删除最后一列, TXNTIME int[] iColumnLength = new int[table.Columns.Count]; FileStream fileStream = new FileStream(FileName, FileMode.Create); StreamWriter streamWriter = new StreamWriter(fileStream, Encoding); StringBuilder strBuilder = new StringBuilder(); //if (File.Exists(FileName))