Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StreamWriter-未附加到已创建的文件_C#_File Io_Streamwriter - Fatal编程技术网

C# StreamWriter-未附加到已创建的文件

C# StreamWriter-未附加到已创建的文件,c#,file-io,streamwriter,C#,File Io,Streamwriter,我正在使用StreamWriter对象写入构造函数创建的文件或已存在的文件。如果文件存在,则会附加数据。如果没有,那么它应该创建一个文件,然后再附加数据。问题是,当需要创建文件时,StreamWriter构造函数会创建文件,但不会将任何数据写入文件 bool fileExists = File.Exists(filePath); using (StreamWriter writer = new StreamWriter(filePath, true)) { if (!fileExist

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

bool fileExists = File.Exists(filePath);

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

    writer.WriteLine("data");
}
编辑:
谢谢你的回答。using块负责关闭writer。至于其他人说这对他们有效,我能给你什么信息来进一步诊断这个问题吗?该文件通过网络进行本地化。这可能是一个潜在的问题。我间歇性地收到错误,“找不到路径的一部分…”和“指定的网络名称不再可用。”

您的代码对我有效,运行3次后我:

start data data data
而且运行平稳,可以试试这个吗?

您的代码对我来说运行正常

尝试使用using语句

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

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

代码在我的计算机上运行良好。我们能知道变量filePath包含什么吗?也许你看错了文件

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

可以尝试此功能。下面是一个很好的例子
FileMode.Append是您想要的

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

将代码分为两部分可能会有所帮助,第一部分编写文件头(如果文件不存在),第二部分编写数据:

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

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

你的代码在我的机器上运行得很好。对我来说也很好@丹,再试试看,也许你在第一次跑步时错过了什么?using语句应该负责关闭和刷新…您上面的代码片段对我来说很有用,您确定其他东西没有干扰文件吗?我再次检查了代码,仍然没有看到任何异常。奇怪的是,如果文件存在,它就会工作。我将收到一个包含“数据”内容的文件。但它从不在初始调用中附加任何内容。这段代码是否被包装在一个try…catch块中,catch语句中没有错误处理?作者使用的是
using
语句?如果您查看示例代码,我使用的是using语句?string filePath=@“\\server\folder\filename.htm”;创建文件后,它可以处理后续调用,因此我知道它是正确的路径。根据您发出的间歇性错误消息,服务器本身可能正忙/脱机。或者文件夹本身已被删除,而您没有创建该文件夹的权限(或者尚未创建该文件夹)。可能是文件/文件夹权限问题?这是我的第一反应。如果文件不存在,我尝试创建它,并且只使用上面的代码,但是在第一次调用时也会写入。以这种方式在服务器上创建文件是否存在延迟问题?我已经在编辑部分下发布了我编写的代码,以检查这是否可以通过网络工作。顺便说一句,不要将其视为生产代码,因为这次的使用不是100%正确的,但它对我来说是有效的,它在创建文件时放入数据,然后附加到id。
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");
}