Я делаю простое приложение, которое должно извлекать все изображения в подкаталогах с сайта и локально создавать структуру файлов и папок. Вот то, что я до сих пор:Как я могу сделать этот искатель изображений более эффективным?
string folder = "c:\someLocalFolder\";
// To keep track of how many files that are processed
int i = 0;
// Folder x
for (int x = 2; x <= 7; x++)
{
// Folder y
for (int y = 0; y < 80; y++)
{
//File z
for (int z = 0; z <= 70; z++)
{
// File, increment
i++;
string destFolderPath = Path.Combine(folder, x.ToString(), y.ToString());
string filePath = Path.Combine(destFolderPath, z.ToString() + ".png");
if (!File.Exists(filePath))
{
var url = string.Format("http://www.somesite.com/images/{0}/{1}/{2}.png", x, y, z);
if (!Directory.Exists(destFolderPath))
// Folder doesnt exist, create
Directory.CreateDirectory(destFolderPath);
var webClient = new WebClient();
webClient.DownloadFileCompleted += (o, e) =>
{
// less than 1 byte recieved, delete
if((new FileInfo(filePath).Length) < 1)
{
File.Delete(filePath);
}
// File processed
i--;
Console.WriteLine(i);
};
webClient.DownloadFileAsync(new Uri(url), filePath);
}
else
{
// File processed
i--;
Console.WriteLine(i);
}
}
}
}
Так как вы можете себе в данный момент я итерация и создание структуры папок, то я загрузить файл асинхронно, а затем проверить, если файл меньше, чем 1 байт в размере файла и удалять его, если это так.
Я думаю, что я делаю это очень громоздким способом, это не очень быстро, и он делает много файлов, только удаляет один раз, который не соответствует требованиям.
Есть ли более быстрый способ определения, существует ли файл на веб-сервере и на основе этой загрузки, если существует, и как я создаю структуру папок, является ли это подходящим способом, как я делаю это для выполнения того, что я хотеть?