2013-01-16 1 views
2

나는단일 ftp 요청으로 하위 디렉토리가있는 디렉토리를 만드시겠습니까? 슬래시 사이의 단어가 불규칙하고 항목 수 :

내가 문자열의

string s = "a/b/c/d" 

참고가 하나의 FTP 요청에 하위 디렉토리와 디렉토리를 생성하는 방법에 대한 작은 문제를 가지고 알 수 없습니다.

a/b/c/d 디렉토리를 FTP 서버에 만드는 방법

내가 이것을 달성하기 위해 사용하고 있습니다 방법은 문자열을 분할하고 아래의 코드를 사용하여 각 부분에 대한 폴더를 만드는 것입니다

: B 내부 c를 한 후, 그 다음

var ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://domain.com/public_html/a"); 
    ftpWebRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword); 
    ftpWebRequest.Method = WebRequestMethods.Ftp.MakeDirectory; 
    ftpWebRequest.GetResponse(); 

내가이 내부의 B 디렉토리를 만듭니다 , 그 다음에 각 코드를 반복하여 c 안에 d를 입력하십시오.

URL을 직접 입력하려고했습니다. 좋아요 :

하지만 작동하지 않습니다.

하나의 요청으로 다른 하위 디렉토리와 폴더를 만들 수있는 방법이 있습니까? 이처럼 좀 더 친화적 인 도서관 (무료 및 오픈 소스)를 사용하고자하는 경우

+1

네이티브 프레임 워크 FtpWebRequest 클래스 대신 무료 오픈 소스 FTP 라이브러리를 사용 하시겠습니까? – Steve

+0

무료 FTP 라이브러리를 사용하지 않는 이유는 무엇입니까? http://stackoverflow.com/questions/1371964/free-ftp-library. 아마도 훨씬 쉬울 것이고, 그들 중 한 명은 한 번의 호출로이 상황을 즉시 처리 할 것이라고 확신합니다. – mellamokb

답변

1

: 다음과 같은 코드를 작성할 수

System.Net.FtpClient.dll

static ManualResetEvent m_reset = new ManualResetEvent(false); 
void Main() 
{ 
    m_reset.Reset(); 
    using (FtpClient ftp = new FtpClient()) 
    { 
     ftp.Host = "yourFTPHost.com"; 
     ftp.Credentials = new NetworkCredential("yourUserName", "yourPassword"); 
     ftp.SetWorkingDirectory("/rootForTest"); 
     if(ftp.DirectoryExists("test")) 
      ftp.DeleteDirectory("test", true); 
     ftp.BeginCreateDirectory("test/path/that/should/be/created", true, 
        new AsyncCallback(CreateDirectoryCallback), ftp); 
     m_reset.WaitOne(); 
     ftp.Disconnect(); 
    } 
} 
static void CreateDirectoryCallback(IAsyncResult ar) 
{ 
    FtpClient ftp = ar.AsyncState as FtpClient; 
    try 
    { 
     if (ftp == null) 
      throw new InvalidOperationException("The FtpControlConnection object is null!"); 
     ftp.EndCreateDirectory(ar); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    } 
    finally 
    { 
     m_reset.Set(); 
    } 
} 
(자신의 예에서 적응)

부작용 : System.Net.FtpClient에는 전체 .NET Framework 4.0이 필요합니다. (클라이언트 프로필이 충분하지 않음)

0

일부 서버는 MKD a/b/c/d와 같은 FTP 명령을 지원합니다. 서버가 SITE 명령을 통해 쉘 명령 실행을 지원하지 않는다면 "SITE md a/b/c/d"를 호출 할 수 있습니다 (그러나 이것은 기계 별 임). 위의 방법 중 어느 것도 작동하지 않는다면 루프처럼 폴더를 만들거나 하나의 방법으로이 루프를 숨기는 라이브러리를 사용해야합니다.

관련 문제