我正在尝试使用c#创建一个.txt文件并在其上写入,尽管我的代码运行时没有任何错误,文件在运行后不存在
string path = @"C:\Users\stra\Documents\Visual Studio 2017\Projects\ConsoleApp2\file.txt";
try
{
if (File.Exists(path))
{
//writes to file
System.IO.File.WriteAllText(path,"Text to add to the file\n");
}
else
{
// Create the file.
using (FileStream fs = File.Create(path))
{
System.IO.File.WriteAllText(path, "Text to add to the file\n");
}
}
// Open the stream and read it back.
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
答案 0 :(得分:1)
我在上面的代码中看到的问题是,当您创建文件时,您有一个打开的文件流,阻止任何其他进程访问该文件。当您尝试调用System.IO.File.WriteAllText时,代码会在文件被锁定时抛出IOException。这是根据documentation for File.Create
预期的此方法创建的FileStream对象的默认FileShare值为None;在原始文件句柄关闭之前,没有其他进程或代码可以访问创建的文件。
要解决此问题,我会更改以下代码:
// Create the file.
using (FileStream fs = File.Create(path))
{
System.IO.File.WriteAllText(path, "Text to add to the file\n");
}
要么不使用文件流,请使用File类:
// Create the file.
System.IO.File.WriteAllText(path, "Text to add to the file\n");
或者如果您想使用文件流,请使用FileStream Write方法写入:https://msdn.microsoft.com/en-us/library/system.io.filestream.write(v=vs.110).aspx。
// Create the file.
using (FileStream fs = File.Create(path))
{
char[] value = "Text to add to the file\n".ToCharArray();
fs.Write(Encoding.UTF8.GetBytes(value), 0, value.Length);
}
通过以下任何一种修改,上述代码适用于我。