C#에서 using System.Net 를 사용하면
FTP 접속해서 폴더 유무 확인이 가능합니다.
단계는
1. FTP로 접속할 IP, Port, 생성할 폴더명으로 경로를 파라미터로 WebRequest 를 초기화 해줍니다.
2. FTP로 접속을 위한 ID, Password 로 권한을 설정 하구요
3. FtpWebRequest 기능 중 해당 폴더의 하위 파일 목록을 가져오는(ListDirectory)를 대입 합니다.
(해당 폴더의 하위 파일List를 가져와야 하는데 폴더 자체가 없으면 예외로 빠지기 때문에 해당 폴더의 유무를 알 수 있습니다.)
4. 그 다음 GetResponse() 함수로 FTP로 부터 결과 확인
4번 실행 후 예외로 빠지게 된다면
경로 마지막 폴더명 뒤에 / 표시를 안한경우 또는
이미 해당 폴더명으로 존재하거나 ID, Passsword 가 틀린 경우가 많으니 다시 한번 확인해 보세요.
# 아래 코드의 절반은 예외처리 내용이기 때문에 실제 기능 구현 코드는 7줄 정도 입니다.
코드 예시
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace WindowsFormsApplication2
{
public class test
{
public void checkDirectoryExists()
{
string directory = "ftp://???.???.???.??:21/폴더1/"; //ftp://ip:포트/폴더명/;
FtpWebRequest requestFTPUploader = (FtpWebRequest)WebRequest.Create(directory);
requestFTPUploader.Credentials = new NetworkCredential("ID", "PW"); //id, password
var request = requestFTPUploader;
request.Method = WebRequestMethods.Ftp.ListDirectory;
try
{
using (var result = (FtpWebResponse)request.GetResponse())
{
result.Close(); //정상 종료
}
}
catch (WebException e)
{
FtpWebResponse response = (FtpWebResponse)e.Response;
if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
{
Console.WriteLine("Does not exist");
}
else if (e.Status == WebExceptionStatus.ProtocolError)
{
Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
}
else
{
Console.WriteLine("Error: " + e.Message);
}
}
}
}
}
해당 폴더가 존재한다면 GetResponse() 에서 True 를 반환하기 때문에
True 인 경우 FTP네트워크를 닫아 주고 해당 기능 구현을 마무리 했습니다.
FTP 폴더 유무 확인은 이런식으로 확인 가능하구요
반대로 FTP 폴더 생성을 하고 싶다면 아래 링크로 고고!
'프로그래밍 > C#' 카테고리의 다른 글
| C# FTP 폴더 생성 (FTP remote create directory) (0) | 2018.09.21 |
|---|---|
| C# xml파일 읽기 (0) | 2018.09.14 |
| C# FileSystemWatcher 파일 감시 모니터링 (0) | 2018.09.12 |