我需要你清楚我的观点。我可以在这里使用SaveFileDialog愚蠢的应用程序,但我有点卡住了。 基本上,我有一个OpenFileDialog来搜索.xml文件并在datagridview中显示它。然后我希望将datagridview的内容导出为CSV文件。 这就是它停止的地方....我的SaveFileDialog被说出来但我知道我有写作的担忧,但一开始我不明白为什么以及如何......
我有权这样做:'Stream'不包含'WriteLine'的定义,并且没有找到接受'Stream'类型的第一个参数的扩展方法'WriteLine'(using指令或'assembly-it'的引用不见了?)
当我把评论分成两行时myStream.writeline bah它告诉我它已导出但是空CSV(正常是什么)
你能帮我吗?
private void SaveBtn_Click(object sender, EventArgs e)
{
Stream myStream;
SaveFileDialog enregistrercsv = new SaveFileDialog();
enregistrercsv.Filter = "Fichier CSV (*.csv)|*.csv|All files (*.*)|*.*";
if (enregistrercsv.ShowDialog() == DialogResult.OK)
{
if ((myStream = enregistrercsv.OpenFile()) != null)
{
string strHeader = "";
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
strHeader += dataGridView1.Columns[i].HeaderText + ",";
}
myStream.WriteLine(strHeader);
for (int m = 0; m < dataGridView1.Rows.Count; m++)
{
string strRowValue = "";
for (int n = 0; n < dataGridView1.Columns.Count; n++)
{
strRowValue += dataGridView1.Rows[m].Cells[n].Value + ",";
}
myStream.WriteLine(strRowValue);
}
}
myStream.Close();
MessageBox.Show("Fichier CSV créé avec succès FUCK YEAH");
}
}
谢谢你们
答案 0 :(得分:0)
尝试使用StreamWriter而不是Stream,并且通常最好的做法是仅在尽可能狭窄的范围内声明您的Stream,并在using块中执行此操作,如下所示:
using(StreamWriter writer = enregistrercsv.OpenFile())
{
if(writer != null)
{
//Perfrom your writer.WriteLine("value goes here"); here.
}
}
这可以确保您在完成后立即关闭流,因此如果您尝试在同一路径上打开新流,则不会导致问题。
看看是否能解决您的问题。
编辑:修改代码位以获得更多上下文。注释将是您处理和写入信息的两个循环。
答案 1 :(得分:0)
以下是在使用块中使用Streamwriter的示例:
private void SaveBtn_Click(object sender, EventArgs e)
{
SaveFileDialog enregistrercsv = new SaveFileDialog();
enregistrercsv.Filter = "Fichier CSV (*.csv)|*.csv|All files (*.*)|*.*";
if (enregistrercsv.ShowDialog() == DialogResult.OK)
{
using (StreamWriter writer = new StreamWriter(enregistrercsv.FileName)
{
string strHeader = "";
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
strHeader += dataGridView1.Columns[i].HeaderText + ",";
}
writer.WriteLine(strHeader);
for (int m = 0; m < dataGridView1.Rows.Count; m++)
{
string strRowValue = "";
for (int n = 0; n < dataGridView1.Columns.Count; n++)
{
strRowValue += dataGridView1.Rows[m].Cells[n].Value + ",";
}
writer.WriteLine(strHeader);
}
}
MessageBox.Show("Fichier CSV créé avec succès FUCK YEAH");
}
}
像Nex所说,最好使用StreamWriter并在尽可能窄的范围内声明它。
以下是关于Streamwriter在using语句中的好处的讨论: https://stackoverflow.com/a/14637152/2844631