0

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

bool fileExists = File.Exists(filePath);

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

    writer.WriteLine("data");
}

编辑:感谢您的回答。using 块负责关闭编写器。至于其他人说它对他们有用,我可以给你任何信息来进一步诊断问题吗?该文件通过网络本地化。这可能是一个潜在的问题。我间歇性地收到错误消息,“找不到路径的一部分......”和“指定的网络名称不再可用”。

4

6 回答 6

1

代码在我的电脑上运行良好。我们能知道变量 filePath 包含什么吗?也许您正在查看错误的文件...

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

于 2009-07-20T15:15:48.850 回答
1

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

于 2009-07-20T15:41:16.460 回答
0

您的代码对我有用,运行 3 次后我已经:

开始
数据
数据
数据

您确定您没有尝试访问文件,由于某种原因您无法写入它吗?另外,为了确保writer.Close()在处理它之前放置,虽然Dispose()应该刷新数据。如果这没有帮助,请尝试使用File.Create()适当的标志手动创建文件。

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

公共不安全静态无效 Main()
{
    字符串文件路径 = @"\\COMP-NAME\Documents\foo.txt";
    文件流 fs = null;
    if (!File.Exists(filePath))
        fs = File.Create(filePath);
    别的
        fs = File.Open(filePath, FileMode.Append);

    使用 (StreamWriter writer = new StreamWriter(fs))
    {
        writer.WriteLine("数据");
    }
}

而且运行流畅,可以试试这个吗?

于 2009-07-20T15:12:17.313 回答
0

你的代码对我来说是正确的..

尝试 using 语句

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

    writer.WriteLine("data");
    writer.Flush();
}
于 2009-07-20T15:13:01.807 回答
0

可以试试File.Open功能。底部有一个很好的示例,FileModes FileMode.Append 的列表就是您想要的

于 2009-07-20T15:16:07.073 回答
0

与发布的其他人类似,您的代码在我的 PC 上运行良好。

将代码分成两部分可能会对您有所帮助,如果文件尚不存在,则第一部分编写标头,然后第二部分编写数据:

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");
}
于 2009-07-20T15:27:47.267 回答