2011-12-13 4 views
0

ftp 서버에 zip 파일이 있습니다.이 zip 파일에는 하나 이상의 xml 파일이 들어 있습니다.이 zipfile을 다운로드하고 로컬 디스크에 저장하려면 다음 코드를 작성하십시오. 내가이 우편을 추출 할 때 파일이 있지만ZipFile을 다운로드하는 방법

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_remoteHost + file); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(_remoteUser, _remotePass); 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(responseStream); 

StreamWriter writer = new StreamWriter(destination); 
writer.Write(reader.ReadToEnd()); 

writer.Close(); 
reader.Close(); 
response.Close(); 
+0

당신이 필요로하는 FTP 서버에서 파일 다운로드를위한 샘플 코드입니다. 어떤 언어입니까? – Almo

+0

혹시 http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx를 보셨습니까 –

답변

3

당신은 StreamReader를 통해 FTP 요청의 결과를 채널링 : 여기에 이런 질문은 재. 이것은 문자 인코딩을 처리하는 데 일반적으로 유익한 효과가 있지만 바이너리 데이터 (즉, zip 파일)를 다룰 때 당신이하고 싶은 일이 아닙니다. 대신 스트림에서 직접 데이터를 읽어야합니다. 같은 뭔가 : 여기

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_remoteHost + file); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(_remoteUser, _remotePass); 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 

// Copy the data from the responseStream to destination 1k at a time (feel free to increase buffer size) 
byte[] buffer = new byte[1024]; 
for (int amountRead = responseStream.Read(buffer, 0, buffer.Length); amountRead > 0; amountRead = responseStream.Read(buffer, 0, buffer.Length)) 
{ 
    destination.Write(buffer, 0, amountRead); 
} 
destination.Flush(); 

response.Close(); 
+0

이 결과를 ASP.net 페이지 응답으로 반환하는 경우 명확한 설명을 위해 "대상"변수 Response.AppendHeader ("Content-Disposition", "attachment; filename ="+ filename);은 페이지 응답입니다. Response.ContentType = "application/x-zip-compressed"; 스트림 대상 = Response.OutputStream; –

1

더 우리에게 얘기를

Uri url = new Uri("ftp://ftp.demo.com/file1.txt"); 
if (url.Scheme == Uri.UriSchemeFtp) 
{ 
    FtpWebRequest objRequest = (FtpWebRequest)FtpWebRequest.Create(url); 
    //Set credentials if required else comment this Credential code 
    NetworkCredential objCredential = new NetworkCredential("FTPUserName", "FTPPassword"); 
    objRequest.Credentials = objCredential; 
    objRequest.Method = WebRequestMethods.Ftp.DownloadFile; 
    FtpWebResponse objResponse = (FtpWebResponse)objRequest.GetResponse(); 
    StreamReader objReader = new StreamReader(objResponse.GetResponseStream()); 
    byte[] buffer = new byte[16 * 1024]; 
    int len = 0; 
    FileStream objFS = new FileStream(Server.MapPath("file1.txt"), FileMode.Create, FileAccess.Write, FileShare.Read); 
    while ((len = objReader.BaseStream.Read(buffer, 0, buffer.Length)) != 0) 
    { 
     objFS.Write(buffer, 0, len); 
    } 
    objFS.Close(); 
    objResponse.Close(); 
} 
관련 문제