我正在学习如何在C#中创建文本文件,但我遇到了问题。我用了这段代码:
private void btnCreate_Click(object sender, EventArgs e)
{
string path = @"C:\CSharpTestFolder\Test.txt";
if (!File.Exists(path))
{
File.Create(path);
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("The first line!");
}
}
else if (File.Exists(path))
MessageBox.Show("File with this path already exists.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
当我按下"创建"按钮,Visual Studio显示错误' System.IO.DirectoryNotFoundException',它指向" File.Create(path)"。
问题出在哪里?
答案 0 :(得分:7)
该例外表明您的目录C:\CSharpTestFolder
不存在。 File.Create
将在现有文件夹/路径中创建一个文件,它也不会创建完整路径。
您的支票File.Exists(path)
将返回false,因为该目录不存在,因此该文件也不存在。您需要先检查文件夹中的Directory.Exists
,然后创建目录,然后再创建文件。
将您的文件操作包含在try/catch
中。您不能100%确定File.Exists
和Directory.Exists
,可能有其他流程创建/删除项目,如果您完全依赖这些检查,则可能会遇到问题。
您可以创建目录,如:
string directoryName = Path.GetDirectoryName(path);
Directory.CreateDirectory(directoryName);
(您可以在不调用Directory.CreateDirectory
的情况下调用Directory.Exists
,如果该文件夹已存在,则不会抛出异常)然后检查/创建您的文件
答案 1 :(得分:7)
假设您的目录存在(正如您所说)那么您还有另一个问题
File.Create会锁定它创建的文件,你不能以这种方式使用StreamWriter。
相反,你需要写
using(FileStream strm = File.Create(path))
using(StreamWriter sw = new StreamWriter(strm))
sw.WriteLine("The first line!");
然而,除非您需要使用特定选项(see File.Create overload list)创建文件,否则所有这些都不是必需的,因为如果文件不存在,StreamWriter会自行创建文件。
// File.Create(path);
using(StreamWriter sw = new StreamWriter(path))
sw.WriteLine("Text");
......或全部在一行
File.WriteAllText(path, "The first line");
答案 2 :(得分:5)
您必须先创建目录。
string directory = @"C:\CSharpTestFolder";
if(!Directory.Exists(directory))
Directory.CreateDirectory(directory);
string path = Path.Combine(directory, "Test.txt");
if (!File.Exists(path))
{
File.Create(path);
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("The first line!");
}
}
else if (File.Exists(path))
MessageBox.Show("File with this path already exists.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
答案 3 :(得分:1)
试试这个。
string path = @"C:\CSharpTestFolder";
if (Directory.Exists(path))
{
File.AppendAllText(path + "\\Test.txt", "The first line");
}
else
{
Directory.CreateDirectory(path);
File.AppendAllText(path + "\\Test.txt", "The first line");
}
File.AppendAllText(path, text)
方法将创建一个文本文件(如果它不存在);附加文本并关闭文件。
如果该文件已存在,它将打开该文件并将文本附加到该文件,然后关闭该文件。
该异常表明目录C:\CSharpTestFolder
不存在。