为什么我不能用savefiledialog在我的Excel文件上写?

时间:2016-04-26 15:50:03

标签: c# streamwriter savefiledialog

我需要你清楚我的观点。我可以在这里使用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");
    }

}

谢谢你们

2 个答案:

答案 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