我正在尝试用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
答案 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();
}