程序因 IOException 而崩溃
Program crashing due to 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 the process cannot access the file because it is being used by another process.
第 29 行,即 AppendAllText
行。
像这样重写你的代码
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);
您需要 close/dispose 访问文件的前一个流,因为 File.Create
保持文件打开并且 returns 一个 FileStream
对象。
我检查了你的代码,这个解决方案有效。
File.Create(filePath).Close();
OR/AND
File.Create(filePath).Dispose();
问题是 File.Create
方法使文件保持打开状态,因此操作系统锁定了它。方法 returns 一个 FileStream
对象,可用于 read/write 访问。在您可以使用不同的方法(例如 File.WriteAllText
- 此方法将尝试打开一个已打开的文件)写入该文件之前,必须首先释放 FileStream
对象。看到这个 MS reference.
只需注释掉该行代码即可修复 IOException
。
总的来说,File.Create
不是很常用的方法,一般用在比较特殊的情况下。如果可能,首选方法是使用 string
或 StringBuilder
在内存中构建文本文件,然后将内容输出到文件。就您而言,这绝对是您想要采用的方法。正如其他人提到的,您将使用 File.WriteAllText
。如果文件不存在,它将创建该文件,或者替换已存在文件的内容。如果您想保留以前的内容,请像您在问题中所做的那样使用 File.AppendAllText
。如果文件不存在,此方法将创建文件或将文本附加到先前内容的末尾。
这里的问题是您(您的应用程序)仍然"hold"那个文件。实际上,在向其写入内容之前,您不需要创建该文件。如前所述 here 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);
这将停止 File.Create
使用 OS 打开文件。
我是 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 the process cannot access the file because it is being used by another process.
第 29 行,即 AppendAllText
行。
像这样重写你的代码
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);
您需要 close/dispose 访问文件的前一个流,因为 File.Create
保持文件打开并且 returns 一个 FileStream
对象。
我检查了你的代码,这个解决方案有效。
File.Create(filePath).Close();
OR/AND
File.Create(filePath).Dispose();
问题是 File.Create
方法使文件保持打开状态,因此操作系统锁定了它。方法 returns 一个 FileStream
对象,可用于 read/write 访问。在您可以使用不同的方法(例如 File.WriteAllText
- 此方法将尝试打开一个已打开的文件)写入该文件之前,必须首先释放 FileStream
对象。看到这个 MS reference.
只需注释掉该行代码即可修复 IOException
。
总的来说,File.Create
不是很常用的方法,一般用在比较特殊的情况下。如果可能,首选方法是使用 string
或 StringBuilder
在内存中构建文本文件,然后将内容输出到文件。就您而言,这绝对是您想要采用的方法。正如其他人提到的,您将使用 File.WriteAllText
。如果文件不存在,它将创建该文件,或者替换已存在文件的内容。如果您想保留以前的内容,请像您在问题中所做的那样使用 File.AppendAllText
。如果文件不存在,此方法将创建文件或将文本附加到先前内容的末尾。
这里的问题是您(您的应用程序)仍然"hold"那个文件。实际上,在向其写入内容之前,您不需要创建该文件。如前所述 here 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);
这将停止 File.Create
使用 OS 打开文件。