我正在创建一个文本文件(如果它不存在),然后在我向该文件添加文本后立即创建。但是,我的编译器说它被另一个进程使用,我认为这是因为它刚刚被创建。我该如何解决这个问题?
代码摘录 -
//If the text document doesn't exist, create it
if (!File.Exists(set.cuLocation))
{
File.CreateText(set.cuLocation);
}
//If the text file after being moved is empty, edit it to say the previous folder's name
System.IO.StreamReader objReader = new System.IO.StreamReader(set.cuLocation);
set.currentUser = objReader.ReadLine();
objReader.Close();
if (set.currentUser == null)
{
File.WriteAllText(set.cuLocation, set.each2);
}
答案 0 :(得分:5)
CreateText
方法实际上创建(并返回)一个StreamWriter
对象。你永远不会关闭那个流。
你想要完成的是什么?为什么要尝试从空文件中读取?
只需保留对您正在创建的StreamWriter
的引用,并将其用于编写。
StreamWriter sw = File.CreateText(set.cuLocation);
然后拨打sw.Write
等
请参阅http://msdn.microsoft.com/en-us/library/system.io.streamwriter.write.aspx以供参考。
完成后,请致电sw.Close
。
请注意,在您编写时可能会抛出异常。这可能会阻止流关闭。
解决此问题的一个好方法是将StreamWriter
包装在using
块中。有关详细信息,请参阅此问题:Is it necessary to wrap StreamWriter in a using block?
答案 1 :(得分:1)
不要忘记调用Close方法:
if (!File.Exists(set.cuLocation))
{
File.Create(set.cuLocation)
.Close();
}
答案 2 :(得分:0)
您可以将其封装在using
块中,该块会自动为您关闭流:
if (!File.Exists(set.cuLocation))
{
File.CreateText(set.cuLocation);
}
using(System.IO.StreamReader objReader = new System.IO.StreamReader(set.cuLocation))
{
set.currentUser = objReader.ReadLine();
}
if (set.currentUser == null)
{
File.WriteAllText(set.cuLocation, set.each2);
}