创建后编辑文本文件

时间:2013-07-24 19:47:55

标签: c#

我正在创建一个文本文件(如果它不存在),然后在我向该文件添加文本后立即创建。但是,我的编译器说它被另一个进程使用,我认为这是因为它刚刚被创建。我该如何解决这个问题?

代码摘录 -

//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);
}

3 个答案:

答案 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);
}