【问题标题】:FileStream Data Incomplete when Converting MemoryStream to FileStream将 MemoryStream 转换为 FileStream 时 FileStream 数据不完整
【发布时间】:2011-11-25 09:51:36
【问题描述】:

我正在尝试使用从数据库中检索到的数据创建一个制表符分隔的文件。使用 MemoryStream 创建 StreamWriter 并写入它的方法似乎工作正常——“while(rdr.Read())”循环执行了大约 40 次。但是当我谈到将 MemoryStream 转换为 FileStream 的方法时,生成的制表符分隔文件仅显示 34 行,第 34 行甚至不完整。有些东西限制了输出。也不要发现数据本身有什么问题会导致它突然终止。

转换方法如下:

protected internal static void ConvertMemoryStreamToFileStream(MemoryStream ms, String newFilePath){
        using (FileStream fs = File.OpenWrite(newFilePath)){
            const int blockSize = 1024;
            var buffer = new byte[blockSize];
            int numBytes;
            ms.Seek(0, SeekOrigin.Begin);
            while ((numBytes = ms.Read(buffer, 0, blockSize)) > 0){
                fs.Write(buffer, 0, numBytes);
            }
        }
    }

感谢您的任何帮助,谢谢。

【问题讨论】:

    标签: c# .net asp.net-mvc-3 filestream memorystream


    【解决方案1】:

    如果这是使用 .Net 4.0+,您可以使用新的Stream.CopyTo 接口:

    ms.Seek(0, SeekOrigin.Begin);
    using (var output = File.OpenWrite(newFilePath))
    {
        ms.CopyTo(output);
    }
    

    output被释放时,数据将被刷新。

    【讨论】:

      【解决方案2】:

      自己找到了解决方案,因为没有人会提供帮助。 :(

      在将数据写入MemoryStream的方法中,在开始将数据转成FileStream的方法之前,需要在最后加上这个(其中streamWriter是StreamWriter写入MemoryStream的方法):

      streamWriter.Flush();
      

      显然,这会将所有“缓冲”数据添加到流中,无论这意味着什么。处理记忆很糟糕。

      【讨论】:

      • 您忘记添加语言标签 - c#?。好像没有人看到这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多