繁体   English   中英

C#-System.IO.IOException

[英]C# - System.IO.IOException

我有一种方法可以将文本从文本框中保存到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',因为该文件正在被另一个进程使用。

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

您不需要做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));

}

当您使用创建文件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));

    }
 }

您无需创建文件, 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));
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM