2017-04-19 127 views
-1

我目前所面临的问题而创建的文件,我试图使用StreamWriter类来书写文字内容,但我没有得到预期的答案.. 下面是我的示例代码: -如何删除最后一行空格streamwriter?

我的C#代码如下所示: - 上面代码的

public void ProcessRequest(HttpContext context) 
    { 
     // Create a connexion to the Remote Server to redirect all requests 
     RemoteServer server = new RemoteServer(context); 

     // Create a request with same data in navigator request 
     HttpWebRequest request = server.GetRequest(); 

     // Send the request to the remote server and return the response 
     HttpWebResponse response = server.GetResponse(request); 
     context.Response.AddHeader("Content-Disposition", "attachment; filename=playlist.m3u8"); 
     context.Response.ContentType = response.ContentType; 

     Stream receiveStream = response.GetResponseStream(); 
     var buff = new byte[1024]; 
     int bytes = 0; 
     string token = Guid.NewGuid().ToString(); 

     while ((bytes = receiveStream.Read(buff, 0, 1024)) > 0) 
     { 
      //Write the stream directly to the client 
      context.Response.OutputStream.Write(buff, 0, bytes); 

      context.Response.Write("&token="+token); 
     } 
     //close streams 
     response.Close(); 
     context.Response.End(); 
    } 

输出如下: -

#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-STREAM-INF:BANDWIDTH=20776,CODECS="avc1.66.41",RESOLUTION=320x240 
chunk.m3u8?nimblesessionid=62 
&token=42712adc-f932-43c7-b282-69cf349941da 

但我的预期成果是: -

#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-STREAM-INF:BANDWIDTH=20776,CODECS="avc1.66.41",RESOLUTION=320x240 
chunk.m3u8?nimblesessionid=62&token=42712adc-f932-43c7-b282-69cf349941da 

我只是想在同一行,而不是新的行令牌PARAM ..

谢谢。

+1

您是否检查过从服务器收到的数据还没有以换行符结束?如果是这样,您需要在写入'context.Response'之前将其过滤掉。 – jcb

+0

@jcb我以字节为单位获取数据,因此如何在将文件写入文件之前对其进行过滤? 你能给我一个示例代码吗? – IPS

+0

你可以像'if(buff [bytes-1] == 0x0a)bytes - = 1;'这样检查是否换行符('\ n'如果一个字符,0x0a是十六进制值)是你收到的最后一个字节,然后就像你收到一个字节一样。但是,根据您的服务器,您可能会收到一个回车字节('\ r'或0x0d),或者甚至两者都作为消息的结尾。根据需要修改:) – jcb

回答

2

如果你想简单地在接收字节的结尾处,删除一个换行符,更改代码在你while循环像这样:

while ((bytes = receiveStream.Read(buff, 0, 1024)) > 0) 
{ 
    if (buff[bytes-1] == 0x0a) 
     bytes -= 1; 

    //Write the stream directly to the client 
    context.Response.OutputStream.Write(buff, 0, bytes); 

    context.Response.Write("&token="+token); 
} 

几个注意事项:

  • 它只会工作如果0x0a(新行字节,'\n'作为字符)位于收到的字节末尾。如果出于某种原因,服务器发送的消息以几个块接收,则首先必须确保在检查最后一个字节之前收到了要接收的所有内容。 请注意,这会导致您的当前代码中有多个&token=...行。
  • 根据服务器的不同,它可能使用回车符(0x0d'\r')作为其行结尾字节,或者甚至两者。检查服务器发送的内容并相应地修改代码。
+0

我相信这可能会稍微复杂一点,因为OP可能实际上并不想每1024个字节写入一次令牌......虽然它肯定会回答这个问题它的当前形式 –

+0

接受的答案,非常感谢:) – IPS

+1

@ kevin-gosse:是的,因此我对此的评论:)你是对的,这是严格地回答问题,并没有真正解决所有可能的问题。我不确定要去那里多远,关于SO操作等。 – jcb