打开和保存txt文件
待解决的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace TRAIN
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//建立一个打开文件的对话框(Dialog 对话)
OpenFileDialog openText = new OpenFileDialog();
openText.Filter = "文本文件|*.txt";
if (openText.ShowDialog() == DialogResult.OK)
{
//新建一个datatable用于保存读入的数据
//读入文件
StreamReader reader = new StreamReader(openText.FileName, Encoding.Default);
string[] data = reader.ReadLine().Split(','); //readLine需要加(),不然没有方法 char是'',string ""
int count = data.Length; //int count = reader.ReadLine().Split(',').Length; 多一行 data[].Length;也不行
for (int i = 0; i < count; i++)
{
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //设置所有列自适应宽度
}
string data2 = reader.ReadLine();
for (int i = 0; i < count; i++)
{
dataGridView1.Columns[i].HeaderText = data[i];
}
int count1 = 0;
//为啥跳不出去
while(data2 != null) // while(count!=0)也跳不出去
{
count1++;
}
for (int j = 0; j <count1; j++)
{
string[] data1 = reader.ReadLine().Split(',');
dataGridView1.Rows.Add();
for (int i = 0; i < count; i++)
{
dataGridView1.Rows[j].Cells[i].Value = data1[i];
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}
正确的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//建立一个打开文件的对话框
OpenFileDialog openText = new OpenFileDialog();
openText.Filter = "文本文件|*.txt";
if (openText.ShowDialog() == DialogResult.OK)
{
//新建一个datatable用于保存读入的数据
DataTable dt = new DataTable();
//读入文件
StreamReader reader = new StreamReader(openText.FileName, Encoding.Default);
//将第一行数据用“,”分割成段赋给数组
string[] data1 = reader.ReadLine().Split(',');
int count = data1.Length; //列数
for (int i = 0; i < count; i++)
{
//添加标题
dt.Columns.Add(data1[i], typeof(String));
}
//循环读取所有行
while (!reader.EndOfStream)
{
//新建一行,并将读出的数据分段,分别存入对应的列中
string[] data = reader.ReadLine().Split(',');
DataRow dr = dt.NewRow();
for (int i = 0; i < count; i++)
{
//添加数据
dr[i] = data[i];
}
//将这行数据加入到datatable中
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt;
}
}
private void button2_Click(object sender, EventArgs e)
{
string outFilePath = "";
SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
SaveFileDialog1.Title = "导出TXT结果";
SaveFileDialog1.Filter = "文本文件 (*.txt)|*.txt";
if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
{
string saveFilename = SaveFileDialog1.FileName;
if (!string.IsNullOrEmpty(saveFilename))
{
outFilePath = SaveFileDialog1.FileName;
}
}
FileStream fileStream = new FileStream(outFilePath, FileMode.OpenOrCreate);
StreamWriter streamWriter = new StreamWriter(fileStream, System.Text.Encoding.Unicode);
StringBuilder strBuilder = new StringBuilder();
try
{
//添加列名 用","隔开
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
strBuilder.Append(dataGridView1.Columns[j].Name.ToString() + ",");
}
streamWriter.WriteLine(strBuilder.ToString());
//添加每行数据
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
strBuilder = new StringBuilder();
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
strBuilder.Append(dataGridView1.Rows[i].Cells[j].Value.ToString() + ",");
}
streamWriter.WriteLine(strBuilder.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
streamWriter.Close();
fileStream.Close();
MessageBox.Show("导出完成!");
}
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}