我是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
行。
答案 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
不是很常用的方法,通常用于更特殊的情况。如果可能的话,首选方法是使用string
或StringBuilder
在内存中构造文本文件,然后将内容输出到文件。就您而言,这绝对是您要采用的方法。正如其他人所提到的,您将使用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
保持文件在操作系统中打开。