系统IO异常未处理

时间:2012-12-07 20:38:25

标签: c# csv io streamwriter

我正在尝试用C#开发我的第一个应用程序,而我只是尝试从文件中读取和写入。我做了几个小时的研究,导师试图教我,但它对我没有意义。

我的表格已经开始了,我认为我正在使用的StreamWriter的语法正确,但文件名似乎在另一个进程中使用,我不知道哪个。这是我正在使用的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace CustomerApplication
{
    public partial class AddCustomerForm : Form
    {
        public AddCustomerForm()
        {
            InitializeComponent();
        }
    private void saveAndExitBtn_Click(object sender, EventArgs e)

    {
        StreamWriter sw = File.AppendText("test.csv");


           sw.WriteLine("Test for Hope");

        // next, retrieve hidden form's memory address
        Form myParentForm = CustomerAppStart.getParentForm();
        // now that we have the address use it to display the parent Form
        myParentForm.Show();
        // Finally close this form
        this.Close();
    }// end saveAndExitBtn_Click method

这是Visual Studio不喜欢的行:

StreamWriter sw = File.AppendText("test.csv");

提前感谢您的时间。

〜TT

2 个答案:

答案 0 :(得分:2)

这里有受过教育的猜测(基于,但文件名似乎在另一个进程中使用) - 您打开文件进行写入,但是您永远不会关闭它。因此,当您稍后再次尝试写入时,它会失败。

请注意,如果您在某个其他应用程序(例如记事本)中打开文件,也会发生这种情况。

您应该将流的创建放在using statement中,以确保在您使用完毕后将其关闭:

using(StreamWriter sw = File.AppendText("test.csv")
{
    sw.WriteLine("Test for Hope");

    ...
}

答案 1 :(得分:0)

你确定你没有在其他地方打开文件吗?例如,在您进入该行代码之前,您可以尝试手动删除该文件,以查看某个进程是否正在保留它。我输入它并且它有效。我建议将Streamwriter包装在using语句中并使用FileInfo对象。 FileInfo对象上有一些很好的属性,就像你可以测试文件是否存在一样。你也可以这样做。

FileInfo fi = new FileInfo("C:\\test.csv");

if (fi.Exists)
  using (Streamwriter sw = fi.AppendText())
  {
     sw.WriteLine("tst");

     sw.Close();
  }