C# - System.IO.IOException

时间:2016-05-06 07:30:08

标签: c# dialog ioexception savefiledialog

我有一个方法可以将文本从文本框保存到txt文件中,但每次退出SaveFileDialog时都会收到System.IO.IOException错误。

    static OpenFileDialog ofd = new OpenFileDialog();
    static SaveFileDialog sfd = new SaveFileDialog();
    static String cp;

    private void SaveClass() {
        sfd.DefaultExt = "txt";
        sfd.Filter = "Text Files | *.txt";
        if (sfd.ShowDialog() == DialogResult.OK) {
            cp = sfd.FileName;
            File.Create(cp);

            File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));

        }
    }

Visual Studio突出显示以“File.WriteAllLines”开头的代码,并说这是我收到错误的地方。感谢。

确切的错误消息:

mscorlib.dll中出现未处理的“System.IO.IOException”类型异常

其他信息:进程无法访问文件'C:\ Users \ ktfjulien \ Documents \ poop.txt',因为它正被另一个进程使用。

编辑: 谢谢,我不再收到错误消息,但是我保存到文本框中的所有内容都写在一行上,无论文本是否由新行分隔。

3 个答案:

答案 0 :(得分:3)

您无需执行File.Create(cp);即可写入文件。这是错误的原因。相反,直接做:

cp = sfd.FileName;
FileStream fs = File.OpenWrite(cp);

如果您想使用StreamWriter代替FileStream,请使用FileStream作为StreamWriter的输入

StreamWriter sw = new StreamWriter(fs);

或者,您也可以在展示时直接使用File.WriteAllLines - 不要使用File.Create

if (sfd.ShowDialog() == DialogResult.OK) {
    cp = sfd.FileName;
    //File.Create(cp); //remove this

    File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));

}

答案 1 :(得分:1)

当您使用File.Create()创建文件时File.Create()已使用此文件,您需要在使用其他位置之前关闭该文件,以便在将文本写入文件关闭文件编写器之前

var file = File.Create(cp);
file.Close();

完整的工作解决方案

static OpenFileDialog ofd = new OpenFileDialog();
static SaveFileDialog sfd = new SaveFileDialog();
static String cp;
private void SaveClass()
{
    sfd.DefaultExt = "txt";
    sfd.Filter = "Text Files | *.txt";
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        cp = sfd.FileName;
        var file = File.Create(cp);
        file.Close();

        File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));

    }
 }

答案 2 :(得分:1)

您无需创建文件,File.WriteAllLines将为您执行此操作(或清除文件(如果存在)):

  private void SaveClass() {
    sfd.DefaultExt = "txt";
    sfd.Filter = "Text Files | *.txt";

    if (sfd.ShowDialog() == DialogResult.OK) 
      File.WriteAllLines(sfd.FileName, StudentTextBox.Text
        .Split(new String[] { Environment.NewLine },
               StringSplitOptions.RemoveEmptyEntries));
  }