StreamWriter - 不附加到创建的文件

时间:2009-07-20 15:05:08

标签: c# file-io streamwriter

我正在使用StreamWriter对象写入由构造函数创建或已存在的文件。如果该文件存在,则它会附加数据。如果没有,那么它应该创建一个文件,然后附加数据。问题是当需要创建文件时,StreamWriter构造函数会创建文件,但不会将任何数据写入文件。

bool fileExists = File.Exists(filePath);

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    if (!fileExists)
    {
        writer.WriteLine("start");
    }

    writer.WriteLine("data");
}

编辑: 谢谢你的回答。 using块负责关闭writer。至于其他人说它适合他们,有什么信息我可以给你进一步诊断问题吗?该文件通过网络定位。这可能是一个潜在的问题。我不断地收到错误,“找不到路径的一部分......”和“指定的网络名称不再可用。”

6 个答案:

答案 0 :(得分:1)

我的电脑上的代码运行正常。我们可以知道变量filePath包含的内容吗?也许你看错了文件......

更新:网络问题?也许某人正在网络的另一端做某事。尝试写入本地文件。如果有效,请尝试写入另一个位置的远程文件。

答案 1 :(得分:1)

好吧,所以我明白了。我的本地计算机在通过网络间歇性地访问文件时遇到问题。我将代码上传到服务器并在那里运行它没有任何问题。我非常感谢所有的帮助。对不起解决方案不是很令人兴奋。

答案 2 :(得分:0)

我的代码在3次运行之后对我有用:

start
data
data
data

你确定,你没有尝试访问文件,由于某种原因你无法写入它吗?另外,为了确保在放置它之前放置writer.Close(),尽管Dispose()应该刷新数据。如果这样做无效,请尝试使用带有相应标记的File.Create()手动创建文件。

//编辑: 我在我的机器上试过这个代码:

public unsafe static void Main()
{
    string filePath = @"\\COMP-NAME\Documents\foo.txt";
    FileStream fs = null;
    if (!File.Exists(filePath))
        fs = File.Create(filePath);
    else
        fs = File.Open(filePath, FileMode.Append);

    using (StreamWriter writer = new StreamWriter(fs))
    {
        writer.WriteLine("data");
    }
}

它运行顺利,可以试试这个吗?

答案 3 :(得分:0)

你的代码对我有用..

尝试使用声明

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    if (!fileExists)
    {
        writer.WriteLine("start");
    }

    writer.WriteLine("data");
    writer.Flush();
}

答案 4 :(得分:0)

可以尝试File.Open功能。 FileModes的底部和列表有一个很好的例子 你想要的是FileMode.Append

答案 5 :(得分:0)

与发布的其他人类似,您的代码在我的电脑上正常运行。

如果文件不存在,第一部分写入标题,第二部分写入数据,可能有助于您将代码分为两部分:

try
{
    using (FileStream fs = new FileStream(filePath, FileMode.CreateNew))
    {
        using (StreamWriter sw = new StreamWriter(fs))
        {
            sw.WriteLine("start");
        }
    }
}
catch (IOException ex)
{
}

using (StreamWriter writer = new StreamWriter(filePath, true))
{
    writer.WriteLine("data");
}