none
C#如何取得網站目錄下虛擬清單 RRS feed

  • 問題

  • 使用console application 取到指定網站目錄底下的所有檔案清單

    DirectoryInfo.GetDirectories()
    DirectoryInfo.GetFiles()

    這兩個方法試過只能取得本機目錄底下的檔案

    請問是否有方法可以取得指定網站目錄底下的所有檔案清單呢?

    2014年1月8日 上午 01:32

解答

所有回覆

  • DirectoryInfo類可以設定參數,請注意:

    你的DirectoryInfo类实体.GetFiles("*.*", SearchOption.AllDirectories)

    具體參考:http://msdn.microsoft.com/zh-tw/library/ms143327(v=vs.110).aspx

    另外注意:一下子全部遍歷可能導致緩慢,建議弄一個Tree的樣式,點擊某個文件夾,

    僅僅遍歷其中的當前點鐘的文件夾的全部文件即可。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月8日 上午 01:40
  • 您好:

    之前試過DirectoryInfo 但在指定網頁後 new 一個新的DirectoryInfo 就會發生錯誤

    DirectoryInfo 經過驗證只能使用在本機底下的目錄

            這是我的code 及錯誤訊息 請參閱

    string InitDirectory = @"http://localhost/downloadtest/files/";

    DirectoryInfo di = new DirectoryInfo(InitDirectory);

         錯誤訊息:   URI formats are not supported.
    2014年1月8日 上午 02:00
  • 當然是抓本機下的目錄,若隨便打一串網址,就可抓到那台遠端Server iis 網站下的目錄,那就毫無安全性可言
    2014年1月8日 上午 02:25
  • 是的 Mark Shu 我也是這樣想的

    所以才在問題處就已提出這兩個方式抓取的是本機的目錄

    想請問的是,有牽扯到安全性的問題,那取到網站目錄下的檔案清單是否是可行的?

    如果可行是否有什麼方式可以使用,並且突破安全性的限制呢?

    或是需要對方網站那端與我這邊做配合的方式?

    煩請告知,謝謝


    • 已編輯 KaiserGo 2014年1月8日 上午 02:36
    2014年1月8日 上午 02:32
  • KaiserGo:

    很明顯你是網站開發,而這個命令不允許你直接URL方式遍歷。

    唯一可行的方案是映射到本地物理路徑,然後遍歷:

    foreach (var item in new DirectoryInfo(Server.MapPath("~/Files/")).GetFiles("*.*",SearchOption.AllDirectories))
                {
                    Response.Write(item+"<br/>");   
                }

    我的构造:


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月8日 上午 02:34
  • ThankFulHeart:

    是的,我是用console application還有一個web專案去模擬這個情境

    可目前的需求是,我必須要執行console application來把網站指定目錄下的所有檔案下載下來

    所以說這個需求是不可實現的嗎?即使網站那邊與我這邊配合都不行嗎?

    如果我把該網站目錄下寫成ftp,ftp帳號,密碼寫在console Application是否可行呢?

    煩請告知,謝謝


    • 已編輯 KaiserGo 2014年1月8日 上午 03:03
    2014年1月8日 上午 02:48
  • 你要指定下载某个服务器下全部内容,建议用FTP协议,参考:

    下载一个文件:http://msdn.microsoft.com/en-us/library/ms229711(v=vs.110).aspx

    下载多个(请参考示例代码:http://www.360doc.com/content/10/1011/16/3420024_60131619.shtml)


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月8日 上午 03:10
  • ThankfulHeart:

    謝謝你,我想到另外一個作法是,如果把網站下資料夾的安全性打開

    ,指定權限,是否就能下載檔案了呢?

    2014年1月8日 上午 03:19
  • 1. 首先請啟用網站的[瀏覽目錄]功能

    2. 參考這篇討論的做法:C# HttpWebRequest command to get directory listing

    • 已標示為解答 KaiserGo 2014年1月8日 上午 07:38
    • 已取消標示為解答 KaiserGo 2014年1月8日 上午 07:38
    • 已標示為解答 KaiserGo 2014年1月8日 上午 07:38
    2014年1月8日 上午 03:47
  • 有預設網頁就破功了。

    這是不正確的發想,感覺是惡意的砍站軟體。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年1月8日 下午 03:27
  • 請說明你要這樣設計的理由,否則視為惡意軟體的行為。

    現在 IIS 預設是拒絕目錄列舉的功能,除了透過 Crawler,原則上是辦不到。

    透過 Crawler 網站一樣有擋的機制,不是 100% 有效,也不可能。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年1月8日 下午 11:53
    版主