Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IOException导致程序崩溃_C#_File Handling_Ioexception - Fatal编程技术网

C# IOException导致程序崩溃

C# IOException导致程序崩溃,c#,file-handling,ioexception,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 filePa

我是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行是
附录文本
行。

将代码改写为

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);

由于
file.Create
使文件保持打开状态并返回
FileStream
对象,因此需要关闭/处置访问该文件的上一个流

我检查了你的代码,这个解决方案有效

File.Create(filePath).Close();
或/和

File.Create(filePath).Dispose();

问题是
File.Create
方法保持文件打开,因此操作系统会锁定它。该方法返回可用于读/写访问的
FileStream
对象。在使用其他方法(例如
file.writealText
-此方法将尝试打开已打开的文件)写入该文件之前,必须首先释放
FileStream
对象。看这个

简单地注释掉这行代码将修复
IOException


通常,
File.Create
不是一种非常常用的方法,通常用于更特殊的情况。如果可能,首选的方法是使用
string
StringBuilder
在内存中构建文本文件,然后将内容输出到文件。在你的情况下,这绝对是你想要采取的方法。正如其他人所提到的,您可以使用
File.writealText
。如果文件不存在,它将创建该文件,或者替换现有文件的内容。如果要保留以前的内容,请像在问题中那样使用
文件.AppendAllText
。如果文件不存在,此方法将创建该文件,或将文本附加到上一内容的末尾。

这里的问题是您(您的应用程序)仍然“保留”该文件。实际上,在写入文件之前,不需要创建该文件。如前所述,
AppendAllText
将创建一个文件,如果它不存在,那么只需删除该行,
file.create(filePath)

尝试以下操作:

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);

这将停止
文件。使用操作系统创建保持文件打开状态的

您的问题是什么?应用程序崩溃它如何崩溃?抛出了什么异常?在哪一行?system.IO.IOException,进程无法访问该文件,因为另一进程正在使用该文件。第29行是appendAllText行。请将您在问题本身中遇到的错误发布出来,不要再在评论中发布,
appendAllText
WriteAllines
对于新的空文件也同样有效。非常感谢!这样做更有意义。仍在学习。:)@你知道你犯了什么错误吗?我想你们对这个解决方案感兴趣。