C# 使用memorystream清除二进制编写器

C# 使用memorystream清除二进制编写器,c#,c#-4.0,memorystream,binarywriter,C#,C# 4.0,Memorystream,Binarywriter,我有一个带有memorystream的binarywriter,如果出现以下情况,我需要清除它: public void Execute() { MemoryStream memoryStream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(memoryStream); Log log = new Log(writer); log.Write("OK1"); ... /

我有一个带有memorystream的binarywriter,如果出现以下情况,我需要清除它:

public void Execute() {
    MemoryStream memoryStream = new MemoryStream();
    BinaryWriter writer = new BinaryWriter(memoryStream);
    Log log = new Log(writer);
    log.Write("OK1");
    ...

    // If condition
    memoryStream = new MemoryStream();
    ...
    log.Write("OK2");
    ...
}

public class Log {

    private BinaryWriter log;

    public Log(BinaryWriter bw)
    {
        log = bw;
    }

    public void write(string msg)
    {
        log.Write(msg);
    }
}
但问题是memorystream是空的。我再次尝试创建一个新的BinaryWriter:

public void Execute() {
    MemoryStream memoryStream = new MemoryStream();
    BinaryWriter writer = new BinaryWriter(memoryStream);
    Log log = new Log(writer);
    log.Write("OK1");
    ...

    // If condition
    memoryStream = new MemoryStream();
    writer = new BinaryWriter(memoryStream);
    ...
    log.Write("OK2");
    ...
}

public class Log {

    private BinaryWriter log;

    public Log(BinaryWriter bw)
    {
        log = bw;
    }

    public void write(string msg)
    {
        log.Write(msg);
    }
}
但是BinaryWriter和MemoryStream都是临时的

如何使用memorystream清除binarywriter?我需要将memorystream的最终内容写入一个文件


谢谢

此代码通过内存流初始化
log
对象,然后创建另一个内存流,其引用存储在
memoryStream
中,但
log
object binarywriter有其原始内存流,而不是新的内存流。
您可以通过检查它们的HashCode来检查这一点。

此代码通过内存流初始化
log
对象,然后创建另一个内存流,其引用存储在
memoryStream
中,但
log
对象binarywriter有其原始内存流,而不是新内存流。
您可以通过检查它们的HashCode来检查这一点。

此代码通过内存流初始化
log
对象,然后创建另一个内存流,其引用存储在
memoryStream
中,但
log
对象binarywriter有其原始内存流,而不是新内存流。
您可以通过检查它们的HashCode来检查这一点。

此代码通过内存流初始化
log
对象,然后创建另一个内存流,其引用存储在
memoryStream
中,但
log
对象binarywriter有其原始内存流,而不是新内存流。
您可以通过检查它们的HashCode来检查这一点。

您的意思是要写入不同的
内存流吗?您已将旧的
编写器的引用传递给
日志
,因此
日志
实例保存该引用。在此之后更改
writer
变量将不会生效。你要么

  • 创建一个新日志,并将新的
    编写器
    传递给它
  • 公开
    Log
    方法,以允许从外部操纵对象保留的
    BinaryWriter

  • 您的意思是要写入不同的
    内存流
    ?您已将旧的
    编写器的引用传递给
    日志
    ,因此
    日志
    实例保存该引用。在此之后更改
    writer
    变量将不会生效。你要么

  • 创建一个新日志,并将新的
    编写器
    传递给它
  • 公开
    Log
    方法,以允许从外部操纵对象保留的
    BinaryWriter

  • 您的意思是要写入不同的
    内存流
    ?您已将旧的
    编写器的引用传递给
    日志
    ,因此
    日志
    实例保存该引用。在此之后更改
    writer
    变量将不会生效。你要么

  • 创建一个新日志,并将新的
    编写器
    传递给它
  • 公开
    Log
    方法,以允许从外部操纵对象保留的
    BinaryWriter

  • 您的意思是要写入不同的
    内存流
    ?您已将旧的
    编写器的引用传递给
    日志
    ,因此
    日志
    实例保存该引用。在此之后更改
    writer
    变量将不会生效。你要么

  • 创建一个新日志,并将新的
    编写器
    传递给它
  • 公开
    Log
    方法,以允许从外部操纵对象保留的
    BinaryWriter

  • 第一个代码段不起作用,因为BinaryWriter仍在使用旧的MemoryStream引用。你无法说服它使用新的

    第二个代码段不起作用,因为日志类仍在使用旧的BinaryWriter引用。您可以通过添加一个更新“log”的方法来说服它使用新的方法

    或者你可以作弊并调用memoryStream.SetLength(0)强制它从头开始


    一定要回顾一下使用MemoryStream进行日志记录的智慧。它的大小没有上限。大概是您寻找此解决方案的原因。当你需要倒流时,完全扔掉所有东西是不好的。Murphy将确保在您需要日志中的信息来解决问题的确切时刻发生这种情况。A没有此问题。

    第一个代码段不起作用,因为BinaryWriter仍在使用旧的MemoryStream引用。你无法说服它使用新的

    第二个代码段不起作用,因为日志类仍在使用旧的BinaryWriter引用。您可以通过添加一个更新“log”的方法来说服它使用新的方法

    或者你可以作弊并调用memoryStream.SetLength(0)强制它从头开始


    一定要回顾一下使用MemoryStream进行日志记录的智慧。它的大小没有上限。大概是您寻找此解决方案的原因。当你需要倒流时,完全扔掉所有东西是不好的。Murphy将确保在您需要日志中的信息来解决问题的确切时刻发生这种情况。A没有此问题。

    第一个代码段不起作用,因为BinaryWriter仍在使用旧的MemoryStream引用。你无法说服它使用新的

    第二个代码段不起作用,因为日志类仍在使用旧的BinaryWriter引用。您可以通过添加一个更新“log”的方法来说服它使用新的方法

    或者你可以作弊并调用memoryStream.SetLength(0)强制它从头开始

    一定要回顾一下使用MemoryStream进行日志记录的智慧。没有上流社会