gpt4 book ai didi

file-io - 将 MemoryStream 转换为 FileStream 会创建数百个相同的文件?

转载 作者:行者123 更新时间:2023-12-05 08:24:34 26 4
gpt4 key购买 nike

我正在访问一个返回 pdf 文件作为响应的 httpwebrequest。我正在将该响应读入内存流,然后再转换为文件。问题是,正在创建数百个文件。不知道为什么,我试了很多方法,都是一样的...这是返回内存流的第一个方法。

        MemoryStream memStream = new MemoryStream();
byte[] buffer = new byte[2048];

int bytesRead = 0;
do
{
bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length);
memStream.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);

第二个转换为 FileStream...

            byte[] data = stream.ToArray();

FileStream fs = new FileStream(newFile, FileMode.CreateNew);
fs.Write(data, 0, data.Length);

有什么想法吗?

编辑以添加更多代码...

    public MemoryStream GetToStream()
{
if (_Req == null)
throw new Exception("HttpWebRequest is not initialised");

GetResult(_Req);

MemoryStream memStream = new MemoryStream();
byte[] buffer = new byte[2048];

int bytesRead = 0;
do
{
bytesRead = _ResponseStream.Read(buffer, 0, buffer.Length);
memStream.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);

_ResponseStream.Close();

if (memStream.Length > 0)
return memStream;
else return null;
}

newFile 是要创建的文件到服务器的映射路径。

            byte[] data = stream.ToArray();

FileStream fs = new FileStream(newFile, FileMode.Create);
fs.Write(data, 0, data.Length);
fs.Close();

我试过 stream.WriteTo(fs),同样的事情发生了。很奇怪。

最佳答案

完全不清楚为什么您会得到多个文件,但是您应该能够根据文件名得到一些信息——每个信息都对应于 newFile< 的值.

顺便说一句,我注意到您没有关闭文件流。使用File.WriteAllBytes是实现目标的更简单方法,不需要您关闭任何内容:

byte[] data = stream.ToArray();
File.WriteAllBytes(newFile, data);

另一种方法是仍然使用 FileStream(使用 using 语句)但使用 MemoryStream.WriteTo避免调用必须复制所有数据的 ToArray:

using (FileStream fs = File.Create(newFile))
{
stream.WriteTo(fs);
}

关于file-io - 将 MemoryStream 转换为 FileStream 会创建数百个相同的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com