-2

我正在尝试用 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

4

2 回答 2

2

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

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

您应该将流的创建放在一个using语句中,以确保在您完成使用它时它会关闭:

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

    ...
}
于 2012-12-07T20:53:57.840 回答
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();
  }
于 2012-12-07T20:56:03.987 回答