2011-12-29 6 views
0

사용자가 내 사이트에서 다운로드 할 수있는 파일에 문자열을 쓰려고합니다.Response.BinaryWrite() - 파일 시작 부분에 정크가 나옴

var tcxString = "Some code to get my string"; 

byte[] bytes; 
MemoryStream cvsStream = new MemoryStream(); 
BinaryFormatter bf = new BinaryFormatter(); 
bf.Serialize(cvsStream, tcxString); 

cvsStream.Seek(0, SeekOrigin.Begin); 
bytes = cvsStream.ToArray(); 

Response.Clear(); 
Response.AppendHeader("content-length", cvsStream.Length.ToString()); 
Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("content-disposition", "attachment; filename=MyFileName.txt"); 
Response.BinaryWrite(bytes); 

출력이됩니다 :

ÿÿÿÿ   Some code to get my string 

을 나는 내 탐색 위치과 관련이있다 같은데요하지만 올바른이어야 탐색 모르겠어요. 나는 가끔 내 파일 끝에있는 쓰레기도 보았다. 파일의 시작과 끝에 정크를 제거하려면 어떻게해야합니까?

+3

정말로 무엇을하려고합니까? 사용자가 문자열을 다운로드 할 수 있도록 문자열의 내용을 출력 해보십시오. binaryFormatter는 사용하지 말고 문자열을 직접 응답에 쓰십시오 (AppenHeader 호출은 클라이언트가 다운로드로 처리하도록합니다). 정크는 BinaryFormatter의 제품으로, 일부 유형/인스턴스 정보가 추가 된 문자열을 직렬화합니다. – Polity

+3

왜'WriteFile' 대신'BinaryWrite'를 사용합니까? – Oded

+0

polity is right .. binaryFormatter를 사용하면 안됩니다. –

답변

2

사용중인 이진 형식화 기 때문입니다. 대신 Encoding.GetBytes를 시도하십시오. 당신이 작성하는 텍스트 파일

 var tcxString = "Some code to get my string"; 

     byte[] bytes = Encoding.UTF8.GetBytes(tcxString); 

     Response.Clear(); 
     Response.AppendHeader("content-length", bytes.Length.ToString()); 
     Response.ContentType = "application/octet-stream"; 
     Response.AppendHeader("content-disposition", "attachment; filename=MyFileName.txt"); 
     Response.BinaryWrite(bytes); 

감사

+1

바이너리 formmater는 객체 그래프를 직렬화하기 위해 실제로 사용되지만 문자열은 바이트 배열로만 변환해야합니다. –

2

인가? Response.Write를 사용하여 콘텐츠를 출력 스트림에 씁니다.

string tcxString = "Some code to get my string"; 

Response.Clear(); 
Response.ContentType = "text/plain"; 
Response.AppendHeader("content-disposition", "attachment; filename=MyFileName.txt"); 
Response.Write(tcxString); 
관련 문제