White Whale Studio

[C#/WPF] FTP - DownLoad Files / 파일 다운로드 본문

IT Engineering/.Net (WPF)

[C#/WPF] FTP - DownLoad Files / 파일 다운로드

glorymind 2015. 4. 2. 13:04
반응형

안녕하십니까아~ 글마입니다.


오늘은 FTP 사용에 대해서 살펴볼 예정입니다.

System.Net 를 참조해서 간단하게 사용가능하도록 구현해보겠습니다.


FTP 접근에 대해서는 필요에 따라서 다양한 기능들을 사용할수 있겠지만, 

저같은 경우 업무 내용에 필요한 부분이 어느정도는 한정되어 있어 필요하고 괜찮다 싶은 부분만

기술하도록 하겠습니다.


FTP와 관련하여 다룰 내용은 파일 다운로드/업로드, 디렉토리 변경, 파일 삭제, 디렉토리 정보 받기 정도가 있겠습니다.


해당 포스팅에서는 파일 다운로드에 대해서 살펴볼겁니다.


우선 using System.Net; 로 참조를 추가합니다.



FileStream outputStream = new FileStream(url, FileMode.Create); // 파일 다운로드할 위치

FtpWebRequest request = FtpWebRequest.Create(server + "/" + filename) as FtpWebRequest; // 파일 불러올 위치, 서버

request.Credentials = new NetworkCredential(id, pw); // FTP 접속 ID, Password

request.UsePassive = true;

request.Method = WebRequestMethods.Ftp.DownloadFile; // 다운로드 파일 설정


FtpWebResponse response = request.GetResponse() as FtpWebResponse;

Stream responseStream = response.GetResponseStream();


int bufferSize = 99999; // 한번에 다운로드 받을 사이즈 지정

int readCount;

byte[] buffer = new byte[bufferSize]; // 데이터를 받을 버퍼 사이즈 지정

readCount = responseStream.Read(buffer, 0, bufferSize); // 받기 시작


/* 파일의 총 카운트를 받고 받은 만큼 감소시키는 방식입니다. readCount 값이 결과적으로 0이 되면 

모두 다운로드 받았다는 의미가 됩니다.

*/ 


while (readCount > 0) // 파일 다운로드가 완료될 때까지 반복 

{

     totalread += readCount;

     result = totalread / fileSize;

     perc = result;

     Console.WriteLine(filename + "의 다운로드 진행률 : " + totalread + " / " + fileSize);

     outputStream.Write(buffer, 0, readCount);

     readCount = responseStream.Read(buffer, 0, bufferSize);

}


responseStream.Close(); // 스트림을 모두 사용하면 닫아줍니다.

response.Close();

outputStream.Close(); // keeps file open if not closed



주석을 참고하시면 크게 어려운 부분은 없으리라 생각합니다.

이벤트를 사용하셔서 프로그레스바 혹은 콘솔에 결과값을 출력해주시면 쉽게 

다운로드 상황을 확인하실 수 있겠습니다.

반응형
Comments