System.IO.IOException创建文件

时间:2015-05-21 18:48:47

标签: c# windows winforms file-writing

如果我在新创建的文件中写入内容,则会出现错误。

这是我的代码:

private void ButtonClick(object sender, EventArgs e)
    {                    
        Button b = (Button)sender;
        string inputKey = b.Text;

        for (int i = 0; i < tunes.Length; i++) 
        {
            if (b.Text == tun[i].TuneName)
            {
                Console.Beep(tun[i].Frequency, 200);
                Input.Items.Add(b.Text);
                Output.Items.Add(tun[i].TuneName);
                if (startButtonPressed == true)
                {
                    filename2 = musicFileName + ".csv";

                    File.WriteAllText(filename2, tun[i].TuneName);
                    RecordList.Items.Add(tun[i].TuneName);
                }
            }
        }           
    }

错误出现在Line:File.WriteAllText()... 它说文件无法使用,因为它被另一个进程使用,但我没有打开任何文件。

3 个答案:

答案 0 :(得分:0)

您需要确保变量filename2包含C:\temp\myfile之类的有效路径,而不仅仅是myfile如果位置不是,您可能还需要使用提升的权限运行visual studio否则可以访问

答案 1 :(得分:0)

你也可以使用streamwriter ......

using (StreamWriter writer =new StreamWriter(musicFileName + ".csv";))
    {
        writer.Write(tun[i].TuneName);

    }

答案 2 :(得分:0)

我使用File.Create()生成的文件流,但我会在using语句中创建循环,因此您要确保所有资源都将在最后发布(这就是您使用{{1}的原因})。

using

您实际遇到的问题是,您从未关闭过您的文件。你应该查找using-keyword。它只能用于实现IDisponsable接口的类。然后它会在 using (FileStream fs = File.Create(Path.Combine(musicFileName, ".csv"))) { foreach (tun in tunes) { fs.Write(tun.TuneName); } } 块的末尾调用disponse()并且所有资源都将被释放,例如文件将被关闭。