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# FTP 폴더 생성

 

'프로그래밍 > C#' 카테고리의 다른 글

C# FTP 폴더 생성 (FTP remote create directory)  (0) 2018.09.21
C# xml파일 읽기  (0) 2018.09.14
C# FileSystemWatcher 파일 감시 모니터링  (0) 2018.09.12

C#에서 using System.Net 를 사용하면 

FTP 접속해서 폴더 생성이 가능합니다. (mkdir)

 

단계는

1. FTP로 접속할 IP, Port, 생성할 폴더명으로 경로를 파라미터로 WebRequest 를 초기화 해줍니다.

2. FTP로 접속을 위한 ID, Password 로 권한을 설정 하구요

3. FtpWebRequest 기능 중 폴더생성(MakeDirectory)를 대입 합니다.

4. 그 다음 GetResponse() 함수로 FTP로 부터 결과 확인

 

4번 실행 후 예외로 빠지게 된다면

경로 마지막 폴더명 뒤에 / 표시를 안한경우 또는

이미 해당 폴더명으로 존재하거나 ID, Passsword 가 틀린 경우가 많으니 다시 한번 확인해 보세요.

 

코드 예시

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;

namespace WindowsFormsApplication2
{
    public class test
    {
        public void FTPUpload()
        {                                                                      //ftp://ip:포트번호/폴더명/
            FtpWebRequest requestFTPUploader = (FtpWebRequest)WebRequest.Create("ftp://???.???.???.??:21/폴더1/");

            requestFTPUploader.Credentials = new NetworkCredential("ID", "PW");

            var request = requestFTPUploader;

            request.Method = WebRequestMethods.Ftp.MakeDirectory;

            try
            {
                using (var resp = (FtpWebResponse)request.GetResponse())
                {
                    resp.Close();
                }
            }
            catch (WebException e)
            {                
            }
           
        }

    }
}

 

 

정상적으로 폴더를 생성했다면 GetResponse() 에서 True 를 반환하기 때문에

True 인 경우 FTP네트워크를 닫아 주고 해당 기능 구현을 마무리 했습니다.

 

위 코드로 폴더를 생성시 계층적으로 단계별로 만들어야 합니다.

예를 들어 현재 FTP A폴더 내부가 비어 있는 상태에서

A폴더/B폴더/C폴더((ftp://~/A폴더1/B폴더/C폴더/) 디렉토리 구조를 만들기 위해서

A폴더/B폴더/C폴더/ 이렇게 한번에 진행하면 예외로 빠집니다.

단계적으로 기존 A폴더가 있는 상태에서 A폴더/B폴더/ 로 만든 다음

A폴더/B폴더/C폴더/로 만들어야 합니다.

 

'프로그래밍 > C#' 카테고리의 다른 글

C# FTP 폴더 유무 확인 (FTP remote Check Folder)  (0) 2018.09.21
C# xml파일 읽기  (0) 2018.09.14
C# FileSystemWatcher 파일 감시 모니터링  (0) 2018.09.12

C#에서 XML 파일을 읽어오려면

using System.Xml 에 있는 함수를 사용하면

간단하게 읽어 올 수 있습니다.

 

단계는

1. xmlDocument 생성자를 호출

2 .읽어올 파일 경로를 로드

3. node 단위로 List 로 변환 후 읽어 오시면 됩니다.

 

코드 예시

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;   //MessageBox.Show() 사용시 필요
using System.Xml;             //xml 사용시 필요

namespace WindowsFormsApplication
{

    public class xmlRead
    {

        private void Read()
        {
            string temp = "";

            XmlDocument xml = new XmlDocument();

            xml.Load("D:\\test\\config.xml"); //"D:\\test\\config.xml" == @"D:\test\config.xml" 

            XmlNodeList xmlList = xml.SelectNodes("/config");

            foreach (XmlNode xnl in xmlList)
            {
                temp += xnl["Age"].InnerText;
                temp += xnl["ID"].InnerText;
                temp += xnl["Pw"].InnerText;
                temp += xnl["Name"]["성"].InnerText;
                temp += xnl["Name"]["이름"].InnerText;
            }
            MessageBox.Show(temp);
        }


    } //class
} //nameSpace

 

 

 

[config.xml]

-<config>
    <Age>20</Age>
    <ID>ID</ID>
    <Pw>password</Pw>
    <Name>
        <성>홍</성>
        <이름>길동</이름>
    </Name>
</config>

<Name> 내부 Child <성> 의 값을 읽어오고 싶을때는 xnl["Name"]["성"].innerText 처럼 중첩해서 [] 형태로 지정해주면 됩니다.

 

 

FileSystemWatcher 는 특정 폴더 경로(디렉토리)의 모든 파일

파일이 생성되거나 변경되면 함수 호출을 해줍니다.

 

우선 사용법은

1. FileSystemWatcher 생성자 호출

2. 감시할 폴더 설정(디렉토리)

3. 감시할 항목들 설정 (파일 생성, 크기, 이름., 마지막 접근 변경등..)

4. 감시할 이벤트 설정 (생성, 변경, 삭제..)

5. FIleSystemWatcher 감시 모니터링 활성화

6. 감시할 폴더 내부 변경시 event 호출

 

위 내용을 코드로 구현하면 ...

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; // FileSystemWatcher 은 System.IO 안에 있습니다. using System.Windows.Forms; namespace WindowsFormsApplication { public class FileWatcher { string EqpDirPath = "D:\test\"; private void initWatcher() { watcher = new FileSystemWatcher(); //1. FileSystemWatcher 생성자 호출 watcher.Path = EqpDirPath; //2. 감시할 폴더 설정(디렉토리) // 3. 감시할 항목들 설정 (파일 생성, 크기, 이름., 마지막 접근 변경등..) watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size | NotifyFilters.LastAccess | NotifyFilters.CreationTime | NotifyFilters.LastWrite; //감시할 파일 유형 선택 예) *.* 모든 파일 watcher.Filter = "*.*";

 

watcher.IncludeSubdirectories = true; // 4. 감시할 이벤트 설정 (생성, 변경..) watcher.Created += new FileSystemEventHandler(Changed); watcher.Changed += new FileSystemEventHandler(Changed); watcher.Renamed += new RenamedEventHandler(Renamed); // 5. FIleSystemWatcher 감시 모니터링 활성화 watcher.EnableRaisingEvents = true; } // 6. 감시할 폴더 내부 변경시 event 호출 private void Changed(object source, FileSystemEventArgs e) { MessageBox.Show(e.FullPath); } private void Renamed(object source, RenamedEventArgs e) { MessageBox.Show(e.FullPath); }

 

 

 

코드 상단 주석처럼  

FileSystemWatcher 은 using System.IO 를 선언해 주셔야 합니다.  

initWatcher() 함수를 실행시키면  

주석 번호대로 1~ 5번까지 initWatcher() 함수가 실행이 된 상태에서  

D:\test\ 해당 파일 경로에 파일 또는 폴더가 생기면 바로 Changed() 이벤트가 호출됩니다.  

호출될때 담겨지는 파라미터 FileSystemEventArgs e 에서 e.Fullpath 를 꺼내오면 

생성된 파일의 전체 경로를 가져 옵니다. 

  예) D:\test\새 텍스트 문서.txt  

이렇게 FileSystemWatcher 를 사용해서 해당 폴더를 실시간으로 감지 모니터링하는 기능을 구현 했습니다.  

 

다음 포스팅에선 이렇게 폴더를 감지해서  

FTP 파일 서버로 업로드까지 확장시켜 볼게요 

 

 

 

+ Recent posts