#c# #loops
#c# #циклы
Вопрос:
Привет, у меня есть код:
for (int z = 0; z <= db - 1; z )
{
string title = dataGridView1.Rows[z].Cells[2].Value.ToString();
string postContent = dataGridView1.Rows[z].Cells[0].Value.ToString();
string tags = dataGridView1.Rows[z].Cells[3].Value.ToString();
string categ = textBox2.Text.ToString();
string img = dataGridView1.Rows[z].Cells[1].Value.ToString();
postToWordpress(title, postContent, tags, img);
}
Здесь img — это ссылка. Программа загружает это изображение по этой ссылке, а после выгружает.
public void postToWordpress(string title, string postContent, string tags, string img)
string localFilename = @"f:bizttofile.jpg";
using (WebClient client = new WebClient())
try
{
client.DownloadFile(img, localFilename);
}
catch (Exception)
{
MessageBox.Show("There was a problem downloading the file");
}
Моя проблема заключается в следующем. У меня в этой строке более 1000 ссылок, и некоторые из них повреждены или не найдены. И на этом моя программа останавливается.
Мой вопрос. Я хотел бы простое решение для пропуска, когда ссылка не работает или программа не может загрузить изображение, не публикуйте, просто переходите к следующему.
Комментарии:
1. Используется
continue
для пропуска текущей итерации цикла2. Какова связь между первым и вторым блоком кода?
Ответ №1:
вы должны использовать приведенный ниже код
for (int i = 0; i < length; i )
{
try
{
string img = dataGridView1.Rows[i].Cells[1].Value.ToString();
using (WebClient client = new WebClient())
{
client.DownloadFile(img, localFilename);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
В этом случае, если вы получили какое-либо исключение, оно не остановится, цикл for примет следующий элемент.
Ответ №2:
Чтобы пропустить текущий цикл, у вас есть возможность использовать continue
.
Вы можете использовать это внутри блока catch, где генерируется какое-либо исключение.
Что-то вроде этого
try
{
client.DownloadFile(img, localFilename);
}
catch (Exception)
{
MessageBox.Show("There was a problem downloading the file");
continue; // terminate current loop...
}
Выйдите из текущего цикла и запустите следующий цикл.
Комментарии:
1. В качестве альтернативы вы можете установить try / catch вокруг вызова postToWordpress в цикле, чтобы перехватывать любые ошибки, которые могут возникнуть.