C# IOException导致程序崩溃
我是C#新手,我正在尝试创建一个简单的程序,要求用户输入一个文件名和一些文本,然后保存到新创建的文件中。也许我走得太快了,没有学到我应该掌握的关于文件操作的所有知识。任何帮助都将不胜感激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
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
对于新的空文件也同样有效。非常感谢!这样做更有意义。仍在学习。:)@你知道你犯了什么错误吗?我想你们对这个解决方案感兴趣。