C# 将字节[]转换为PDF

C# 将字节[]转换为PDF,c#,pdf,bytearray,C#,Pdf,Bytearray,在这个问题的帮助下,我能够将byte[]转换为PDF。字节数组长度约为25990。当我试图打开PDF时,它表示文件已损坏。原因可能是什么 我尝试了BinaryWriter,但它创建了0 KB的PDF 这是来自Web服务的响应 示例代码 WebResponse resp = request.GetResponse(); var buffer = new byte[4096]; Stream responseStream = resp.GetResponseStream(); { int cou

在这个问题的帮助下,我能够将byte[]转换为PDF。字节数组长度约为25990。当我试图打开PDF时,它表示文件已损坏。原因可能是什么

我尝试了BinaryWriter,但它创建了0 KB的PDF

这是来自Web服务的响应

示例代码

WebResponse resp = request.GetResponse();
var buffer = new byte[4096];
Stream responseStream = resp.GetResponseStream();
{
  int count;
  do
  {
    count = responseStream.Read(buffer, 0, buffer.Length);
    memoryStream.Write(buffer, 0, responseStream.Read(buffer, 0, buffer.Length));
  } while (count != 0);
}
resp.Close();
byte[] memoryBuffer = memoryStream.ToArray();
System.IO.File.WriteAllBytes(@"E:\sample1.pdf", memoryBuffer);
int s = memoryBuffer.Length;

BinaryWriter binaryWriter = new BinaryWriter(File.Open(@"E:\sample2.pdf", FileMode.Create));
binaryWriter.Write(memoryBuffer);

因为有一次不必要的读取,所以您似乎丢失了一些字节。试试这个:

  do
  {
    count = responseStream.Read(buffer, 0, buffer.Length);
    memoryStream.Write(buffer, 0, count);
  } while (count != 0);

您从流中读取了两次,但只写入了一个缓冲区。更改此项:

count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, responseStream.Read(buffer, 0, buffer.Length));
为此:

count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);

这个字节[]来自哪里?它到底代表什么?在它作为变量出现在代码中之前,它遵循了什么路径?难道你没有在这段时间里来回地对字符进行按摩吗?你能发布你的代码吗?这个问题没有足够的信息来回答。顺便说一下,=25990字节约为25KB。我们不是千里眼,请发布代码,否则我们将自食其果,并冒着因不符合您要求的错误答案而被否决的风险!那一行是无用的——int s=memoryBuffer.Length;记忆之流在哪里?你没有使用using子句…对不起,伙计们。我已经更新了@Oded这个问题,因为它说文件已经损坏了,我还以为有些字节可能写得不正确。