Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取文件和文件夹URL的有效方法_C# - Fatal编程技术网

C# 获取文件和文件夹URL的有效方法

C# 获取文件和文件夹URL的有效方法,c#,C#,比如说,我可以通过一个类似something.com/folderIndex/folderIndex_fileIndex.txt的url从网站上获取某些txt文件,我不知道文件的确切数量,但我想获取所有文件夹中所有文件的url。这样做的最佳方式是什么?目前我正在做以下工作 public async void GetValidFolderCount() { bool valid = true; int folderIndex = 0;

比如说,我可以通过一个类似something.com/folderIndex/folderIndex_fileIndex.txt的url从网站上获取某些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
,因为没有它,url的数量每次都会不同

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;

    }
公共异步任务GetValidFileCount(int-folderIndex,string-baseUrl) { bool valid=true; int fileIndex=0; 使用(var client=new HttpClient()) { while(有效) { fileIndex++; 字符串fileName=folderIndex+“”+((fileIndex<10)?(“0”+fileIndex):fileIndex.ToString())+fileExtension; string fileAddress=string.Format(“{0}/{1}”,baseUrl,fileName); 尝试 { var result=await client.GetAsync(新Uri(文件地址)); if(result.StatusCode!=HttpStatusCode.OK) { 有效=错误; 打破 } } 抓住 { 继续; } UrlRepository.UrlList.Add(文件地址); } } 返回true; } 这种方法需要2分钟,我很确定它不能被认为是有效的,但是最终的项目总数大约是1900个,所以我不确定

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

UPD:总体目标是下载所有文件,但我必须实现一个进度条,显示我下载的文件数和剩余的文件数,因此我认为事先获得url是一个好主意,因为我获得了文件数和url

HTTP没有“列出文件”命令,因此,如果要查找目录中存在的文件(假定服务器实际为该目录中的文件提供服务),可以使用以下两个选项:

  • 尝试下载所有您知道或可以预测文件名的文件
  • 解析服务器生成的索引文档
  • 后者更为可行

    当然,如果文件的编号是可预测的,并且是连续的,那么前者可以做得更聪明。您可以执行某种二进制搜索

    这一切都取决于你的实际目标,但你没有解释。根据问题中的信息,我只需解析索引文档的HTML。

    HTTP没有“列出文件”命令,因此,如果要查找目录中存在的文件(考虑到服务器实际提供该目录中的文件),您可以使用两个选项:

  • 尝试下载所有您知道或可以预测文件名的文件
  • 解析服务器生成的索引文档
  • 后者更为可行

    当然,如果文件的编号是可预测的,并且是连续的,那么前者可以做得更聪明。您可以执行某种二进制搜索


    这一切都取决于你的实际目标,但你没有解释。根据问题中的信息,我将解析索引文档的HTML。

    好的,我将在问题中添加总体目标。基本上,在我获得URL后,我会下载所有文件,但我必须找出文件的确切数量,因为我需要有一个进度条,指示我下载了多少文件以及还有多少文件。好的,我将在问题中添加总体目标。基本上,在我获得URL后,我将下载所有文件,但我必须找出文件的确切数量,因为我需要有一个进度条,指示我已下载了多少文件以及还有多少文件。
    catch{continue;}
    -huh,首先处理这个神奇宝贝异常处理。@Nicolas请不要使用
    内联代码来突出显示随机术语(txt、URL、parse、HTML)。是的,catch{continue;}的东西不是很好,我不得不把try-catch放在那里,因为网站有时会关闭。
    catch{continue;}
    -嗯,首先处理这个神奇宝贝异常处理。@Nicolas请不要使用
    内联代码来突出显示随机项(txt,URL,parse,HTML)。这是内联代码。是的,catch{continue;}不是很好,我不得不把try-catch放在第一位,因为网站有时会关闭。