[C#] C# 코딩공부 #3 FTP 사용하기

개발Velog·2020년 1월 10일
0

C#

목록 보기
3/9

C#에서 FTP 사용하기

c#에서 ftp 다운로드, 업로드 등의 클라이언트 기능을 사용하기 위함.

예제 소스 1 - download 후 로컬 저장

public void FtpDownload()
{
    // 코드 단순화를 위해 하드코드함
    string ftpPath = "ftp://ftp.microsoft.com/softlib/index.txt";
    string user = "anonymous";  // FTP 익명 로그인시. 아니면 로그인/암호 지정.
    string pwd = "";
    string outputFile = "index.txt";

    // WebRequest.Create로 Http,Ftp,File Request 객체를 모두 생성할 수 있다.
    FtpWebRequest req = (FtpWebRequest)WebRequest.Create(ftpPath);
    // FTP 다운로드한다는 것을 표시
    req.Method = WebRequestMethods.Ftp.DownloadFile;
    // 익명 로그인이 아닌 경우 로그인/암호를 제공해야
    req.Credentials = new NetworkCredential(user, pwd);

    // FTP Request 결과를 가져온다.
    using (FtpWebResponse resp = (FtpWebResponse)req.GetResponse())
    {
        // FTP 결과 스트림
        Stream stream = resp.GetResponseStream();

        // 결과를 문자열로 읽기 (바이너리로 읽을 수도 있다)
        string data;
        using (StreamReader reader = new StreamReader(stream))
        {
            data = reader.ReadToEnd();
        }

        // 로컬 파일로 출력
        File.WriteAllText(outputFile, data);                
    }            
}

예제 소스 2 - C#에서 FTP 파일 업로드

우선 WebRequest.Create() 메서드를 사용해 FtpWebRequest 객체 생성.
FtpWebRequest.Method에 UploadFile지정.
쓰기권한이 있는 로그인명 지정.
Stream얻은 후 데이터를 써놓음.
GetRespos()호출

public void FtpUpload()
{
    // 코드 단순화를 위해 하드코드함
    string ftpPath = "ftp://ftp.test.com/home/myindex.txt";    
    string user = "ftpuser";  
    string pwd = "ftppwd";
    string inputFile = "index.txt";

    // WebRequest.Create로 Http,Ftp,File Request 객체를 모두 생성할 수 있다.
    FtpWebRequest req = (FtpWebRequest)WebRequest.Create(ftpPath);
    // FTP 업로드한다는 것을 표시
    req.Method = WebRequestMethods.Ftp.UploadFile;
    // 쓰기 권한이 있는 FTP 사용자 로그인 지정
    req.Credentials = new NetworkCredential(user, pwd);

    // 입력파일을 바이트 배열로 읽음
    byte[] data;
    using (StreamReader reader = new StreamReader(inputFile))
    {
        data = Encoding.UTF8.GetBytes(reader.ReadToEnd());
    }

    // RequestStream에 데이타를 쓴다
    req.ContentLength = data.Length;
    using (Stream reqStream = req.GetRequestStream())
    {
        reqStream.Write(data, 0, data.Length);
    }

    // FTP Upload 실행
    using (FtpWebResponse resp = (FtpWebResponse)req.GetResponse())
    {
        // FTP 결과 상태 출력
        Console.WriteLine("Upload: {0}", resp.StatusDescription);
    }
}

예제 소스 3 - WebClient를 이용한 FTP 다운로드

여러 작업들을 병렬로 처리하는 기능을 제공

public void FtpDownloadUsingWebClient()
{    
    string ftpPath = "ftp://ftp.test.com/home/bin/Home.dll";
    string user = "ftpuser";  // FTP 사용자 로그인
    string pwd = "ftppwd";
    string outputFile = "Home.dll";

    // WebClient 객체 생성
    using (WebClient cli = new WebClient())
    {
        // FTP 사용자 설정
        cli.Credentials = new NetworkCredential(user, pwd);
        
        // FTP 다운로드 실행
        cli.DownloadFile(ftpPath, outputFile);

        // FTP 업로드 실행
        // cli.UploadFile(ftpPath, outputFile);
    }
}
출처 및 참조 : http://www.csharpstudy.com/
profile
안녕하세요. 데이터와 동고동락 중인 개발자 입니다.

0개의 댓글