C# 获取文件和文件夹URL的有效方法
比如说,我可以通过一个类似something.com/folderIndex/folderIndex_fileIndex.txt的url从网站上获取某些txt文件,我不知道文件的确切数量,但我想获取所有文件夹中所有文件的url。这样做的最佳方式是什么?目前我正在做以下工作C# 获取文件和文件夹URL的有效方法,c#,C#,比如说,我可以通过一个类似something.com/folderIndex/folderIndex_fileIndex.txt的url从网站上获取某些txt文件,我不知道文件的确切数量,但我想获取所有文件夹中所有文件的url。这样做的最佳方式是什么?目前我正在做以下工作 public async void GetValidFolderCount() { bool valid = true; int folderIndex = 0;
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。好的,我将在问题中添加总体目标。基本上,在我获得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放在第一位,因为网站有时会关闭。