获取文件和文件夹网址的有效方法

时间:2015-11-24 12:57:41

标签: c#

我们可以说我可以通过一个看起来类似于some.com/folderIndex/folderIndex_fileIndex.txt的网址从网站获取某些txt文件,而且我不知道确切的文件数量,但是我想获取所有文件夹中所有文件的URL。这样做的最佳方式是什么?目前我正在做以下事情。

public async void GetValidFolderCount()
        {
            bool valid = true;
            int folderIndex = 0;
            using (var client = new HttpClient())
            {
                while (valid)
                {
                    folderIndex++;
                    string url = String.Format("{0}/{1}", rootUrl, folderIndex);
                    var result = await client.GetAsync(new Uri(url));
                    if (result.StatusCode != HttpStatusCode.OK)
                    {
                        valid = false;
                        break;
                    }
                    FolderCount++;
                    bool res =  await GetValidFileCount(folderIndex, url);
                }
            }
            GetComplete = true;
        }
不过,我必须在这里使用Task<bool>因为没有它,每次都会有不同的网址数量。

public async Task<bool> GetValidFileCount(int folderIndex, string baseUrl)
    {
        bool valid = true;
        int fileIndex = 0;
        using (var client = new HttpClient())
        {
            while (valid)
            {
                fileIndex++;
                string fileName = folderIndex + "_" + ((fileIndex < 10) ? ("0" + fileIndex) : fileIndex.ToString()) + fileExtension;
                string fileAddress = String.Format("{0}/{1}", baseUrl,fileName);
                try
                {
                    var result = await client.GetAsync(new Uri(fileAddress));
                    if (result.StatusCode != HttpStatusCode.OK)
                    {
                        valid = false;
                        break;
                    }
                }
                catch
                {
                    continue;
                }
                UrlRepository.UrlList.Add(fileAddress);
            }
        }
        return true;

    }

这种方法需要2分钟,我很确定它不会被认为是有效的,但最终的项目总数大约是1900,所以我不太确定。

我还考虑了以下方法:解析HTML并找到锚点,但这似乎不是一个好主意。

UPD:总体目标是下载所有文件,但是我必须实现一个进度条,它会显示我下载的文件数和剩余的文件数,所以我认为事先得到了url#s因为我得到了文件的数量而且我得到了网址,这是个好主意。

1 个答案:

答案 0 :(得分:3)

HTTP没有&#34;列表文件&#34;命令,如果你想要发现目录中存在的文件(假设服务器实际上从该目录提供文件),你可以选择两个选项:

  1. 尝试下载您知道的所有文件,或者可以预测其名称。
  2. 解析服务器生成的索引文档。
  3. 后一种选择更可行。

    当然,你可以做得更聪明,授予文件的编号可预测和连续。您可以执行某种二进制搜索。

    这完全取决于你的实际目标,但你没有解释。鉴于问题中的信息,我只是解析索引文档的HTML。