2011-10-12 3 views
0

현재 유일한 웹 다운 로더를 구현하려고합니다.이 웹 다운 로더는 유일한 디렉토리 전체에 파일을 재귀 적으로 다운로드합니다. Updater.cs : 내가 서버에 파일을 나열있어 무엇웹 서버에서 재귀 적으로 파일 목록보기

나는 현재 내 HTTP 파일에 대한 모든 직접 링크로 구성 patchlist, 작업
public static List<string> remote_filecheck() 
    { 
     List<string> rfiles = new List<string>(); 
     string url = "http://********/patchlist.txt"; 
     WebClient client = new WebClient(); 
     client.DownloadFile(url, @"patchlist.txt"); 

     string line; 
     StreamReader reader = new StreamReader("patchlist.txt"); 

     while ((line = reader.ReadLine()) != null) 
     { 
      rfiles.Add(line); 
     } 
     reader.Close(); 
     return rfiles; 
    } 

.

재귀 적 다운로드와 관련하여 웹에서 거의 모든 스 니펫을 시도했습니다. RegEx, WebRequests 등.

이제 내 HTTP 서버를 통해 재귀 적으로 이동하여 모든 파일 이름을 나열 할 수있는 좋은 방법이 있는지 알고 싶습니다.

파일 이름이 List<string> 인 경우 나머지는 수행 할 수 있습니다.

+0

디렉토리 목록을 찾는 데 유용 할 수 있습니다. http://stackoverflow.com/questions/124492/c-httpwebrequest-command-to-get-directory-listing – Reddog

+0

글쎄, 이미 말했듯이, 나는 정규식 물건,하지만 난 맞는 정규식으로 붙어있어 내 출력이 매우 이상했다. 예, 내 서버에서 디렉토리 목록을 사용할 수 있습니다. – Nop0x

+0

그들은 아마도 거기에 나열된 정규식을 가지고 있습니다. 아니면 거기에 HTML 민첩성 팩을 사용하는 솔루션을 좀 봐 ... – Reddog

답변

0

가져온 색인 생성에서 파일을 가져 오려고하는 서버가 있습니까?

그렇다면이 페이지를 긁어서 각 URL을 하나씩 방문하는 것이 좋습니다.

그렇다면 매우 쉽게 처리 할 수 ​​있을지 확신 할 수 없습니다. WebBrowser 컨트롤은 윈도우에서 실행해야한다는

 string indexUrl = "http://www.stackoverflow.com"; 

     WebBrowser browser = new WebBrowser(); 
     browser.Navigate(indexUrl); 

     do 
     { 
      Application.DoEvents(); 
     } while (browser.ReadyState != WebBrowserReadyState.Complete); 



     var listOfFilePaths = new List<string>(); 


     foreach (HtmlElement linkElement in browser.Document.GetElementsByTagName("a")) 
     { 
      var pagePath = linkElement.GetAttribute("href"); 
      listOfFilePaths.Add(pagePath); 
     } 

참고가 (쉽게) 작업을 얻기 위해 응용 프로그램을 형성한다 : 당신이 이런 식으로 뭔가를 할 수있을 거라 생각 아래

좋아 의견에 따라. 내가 사용하는 indexPath 변수는 서버의 색인 페이지 경로로 변경되어야합니다 (예를 들어 stackoverflow를 예제로 사용했습니다).

foreach 루프는 사이트에서 모든 앵커 (a) 태그를 추출하고 가리키는 경로를 가져 와서 listOfFilePaths 컬렉션에 추가합니다.

이 코드의 실행이 완료되면 listOfFilePaths 컬렉션은 인덱스 페이지의 모든 링크에 대한 항목을 포함하므로 서버의 모든 파일에 대한 링크가 포함됩니다.

여기에서 listOfFilePaths 컬렉션을 반복하면서 각 파일을 하나씩 다운로드해야합니다. 어쩌면 당신이 관심을 가지지 않는 특정 유형의 파일을 다운로드하지 않는 몇 가지 규칙을 사용하는 것조차도 나는 당신이 말한 것에서 이것을 할 수 있어야한다고 믿습니다.

희망이 도움이됩니다.

+0

잘 서버의 색인이 설정되어 있습니다. 하지만 RegularExpression Way로 해보려고하면 목록에 약간의 결과가 나타납니다. – Nop0x

+0

좋아, 서버에서 가져온 html 페이지의 작은 스 니펫을 줄 수 있습니까? –

+0

글쎄, 내가 html 페이지를 얻고 싶지 않다, 나는 일부 파일 frome 서버 (일부 바이너리, xnb 및 C# 파일)를 얻고 싶다. 사실, 나는 로컬 서버의 파일을 웹 서버의 파일과 비교하고 새로운 파일이나 누락 된 파일을 다운로드 할 수있는 일종의 업데이터를 만들고 싶다. – Nop0x

관련 문제