程序因IOException而崩溃

时间:2018-08-13 03:14:31

标签: c# file-handling ioexception

我是C#的新手,我正在尝试创建一个简单的程序,要求用户输入文件名和一些文本,然后将其保存到新创建的文件中。也许我走得太快,并且没有学到关于文件操作的所有知识。任何帮助将不胜感激。

Console.WriteLine("Enter name of file then add .txt");
var fileName = Console.ReadLine();

var folderPath = @"C:\Users\Treppy\Desktop\Megatest\";
var filePath = folderPath + fileName;
File.Create(filePath);


Console.WriteLine(filePath);

Console.WriteLine("Enter the text you want to save to that file");
var inputTextUser = Console.ReadLine();

File.AppendAllText(filePath, inputTextUser);

当应用程序在第29行崩溃时,我收到以下消息:

  

System.IO.IOException该进程无法访问该文件,因为该文件正在被另一个进程使用。

第29行,即AppendAllText行。

5 个答案:

答案 0 :(得分:0)

像这样重写代码

Console.WriteLine("Enter name of file then add .txt");
            var fileName = Console.ReadLine();

            var folderPath =  @"C:\Users\Treppy\Desktop\Megatest\";
            var filePath = folderPath + fileName;


            Console.WriteLine(filePath);

            Console.WriteLine("Enter the text you want to save to that file");
            string[] lines = new string[1];
            var inputTextUser = Console.ReadLine();
            lines[0] = inputTextUser;

            //File.AppendAllText(filePath, inputTextUser);
            File.WriteAllLines(filePath, lines);

您可以不使用数组来写

File.WriteAllText(filePath, inputTextUser);

答案 1 :(得分:0)

由于File.Create保持文件打开并返回FileStream对象,因此您需要关闭/处理访问该文件的上一个流。

我检查了您的代码,此解决方案有效。

File.Create(filePath).Close();

OR / AND

File.Create(filePath).Dispose();

答案 2 :(得分:0)

问题在于,File.Create方法使文件保持打开状态,因此操作系统对其施加了锁定。该方法返回一个FileStream对象,您可以使用该对象进行读/写访问。您必须先处理File.WriteAllText对象,然后才能使用其他方法(例如FileStream写入该文件-此方法将尝试打开一个已打开的文件)。参见此MS reference

只需注释掉该行代码即可解决IOException

通常,File.Create不是很常用的方法,通常用于更特殊的情况。如果可能的话,首选方法是使用stringStringBuilder在内存中构造文本文件,然后将内容输出到文件。就您而言,这绝对是您要采用的方法。正如其他人所提到的,您将使用File.WriteAllText。如果该文件不存在,它将创建该文件,或替换现有文件的内容。如果要保留以前的内容,请像在问题中一样使用File.AppendAllText。如果该文件不存在,则此方法将创建该文件,或将文本追加到上一个内容的末尾。

答案 3 :(得分:0)

这里的问题是您(您的应用程序)仍然“保留”该文件。实际上,在向它写入内容之前,不需要创建该文件。如上所述,here AppendAllText将创建一个文件(如果该文件不存在),因此只需删除该行,其中File.Create(filePath);

答案 4 :(得分:0)

尝试一下:

Console.WriteLine("Enter name of file then add .txt");
var fileName = Console.ReadLine();

var folderPath = @"C:\Users\Treppy\Desktop\Megatest\";

var filePath = System.IO.Path.Combine(folderPath, fileName);

if (!File.Exists(filePath))
{
    File.WriteAllText(filePath, "");
}

Console.WriteLine(filePath);

Console.WriteLine("Enter the text you want to save to that file");
var inputTextUser = Console.ReadLine();

File.AppendAllText(filePath, inputTextUser);

这将停止File.Create保持文件在操作系统中打开。