Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
7 / 7 / 2
Регистрация: 05.07.2012
Сообщений: 30

WebClient

05.07.2012, 16:06. Показов 1652. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток! Помогите пожалуйста.
Есть винформ приложение которое парсит html код определённого сайта, достаёт оттуда ссылки на галереи, потом парсит html код тех галерей достаёт из css ссылки на картинки и закачивает их, всё работало, но сайт отдаёт страницы медленно и я решил распаралелить этап парса галерей и закачки картинок, но не тут то было( начал ловить



вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = Convert.ToInt32(textBox1.Text); i <= Convert.ToInt32(textBox2.Text); i++)
            {
                string url = string.Format("ссылку нипокажу)", i);
                string documentBody = GetHtmlDocBody(url);
                MatchCollection urls = Regex.Matches(documentBody, "href=\"(?<link>[^\"]+тутДомен[^\"]+.html)\"[ ]?>.+(.+ [Фф]ото)");
                
                List<string> bodyList = new List<string>();
 
                foreach (Match item in urls)
                    bodyList.Add(GetHtmlDocBody(item.Groups["link"].Captures[0].Value));
 
                Parallel.ForEach(bodyList, ForeachBody);
            }
        }
 
        void ForeachBody(string item)
        {
            ParseDownloadPhoto(item);
        }
 
        string GetHtmlDocBody(string url)
        {
            string text = "";
        using ( Stream data1 = wc.OpenRead(url) ) {
                using ( StreamReader reader = new StreamReader( data1 ) ) {
                   text = reader.ReadToEnd();
                }
            }
        return text;
        }
 
        void ParseDownloadPhoto(object documentBody)
        {
            MatchCollection collection = Regex.Matches((string)documentBody, "src=\"(?<url>([^\"]+)jpg)\"?");
 
            var wcTemp = new WebClient();
            Random random = new Random();
 
            foreach (Match item in collection)
            {
                string url = item.Groups["url"].Captures[0].Value;
                StringBuilder buildFileName = new StringBuilder();
                buildFileName.Append(@"D:\program files\Install Games\project1\myProject\");
                for (int j = 0; j < 20; j++)
                {
                    int temp = random.Next(61);
                    if (temp < 10)
                        buildFileName.Append(temp.ToString());
                    else
                        buildFileName.Append(Enum.GetName(typeof(Letter), temp));
                }
                buildFileName.Append(".jpg");
                string fileName = buildFileName.ToString();
                wcTemp.DownloadFile(url, fileName); // здесь ловит exception
                FileInfo file = new FileInfo(fileName);
                if (file.Length < 35000)
                    file.Delete();
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2012, 16:06
Ответы с готовыми решениями:

WebClient.DownloadFileAsync и WebClient.DownloadFile
Если правильно понимаю, то WebClient.DownloadFileAsync и WebClient.DownloadFile это 2 разных метода. В интернете большая часть литературы...

Кеширование результата работы Webclient.DownloadStringAsync() (Windows Phone 8 Webclient)
Всем привет. Приложение для Windows Phone 8. Запускаю под дебагом. Обращаюсь на локальный сервер через...

WebClient и цикл for
string id = textBox1.Text; //9904475 string urls = new string {&quot;http://us.asos.com/prd/&quot;, &quot;http://asos.com/prd/&quot;,...

4
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
05.07.2012, 16:49
я так понимаю, один поток записывает файл и в это время другой поток желает влезть в этот же файл. Используйте синхронизацию, lock к примеру
0
7 / 7 / 2
Регистрация: 05.07.2012
Сообщений: 30
05.07.2012, 17:02  [ТС]
пробовал, lock убивает весь смысл распаралеливания. Можете сказать в каком месте Вы увидели двойной доступ к файлу?
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
05.07.2012, 17:11
я не увидел, просто сам дошёл) как вы сказали про потоки, а потом взглянул на текст ошибки
0
7 / 7 / 2
Регистрация: 05.07.2012
Сообщений: 30
05.07.2012, 17:56  [ТС]
ну это понятно, а вот где именно, и почему, т.к по идее там не должно быть никакого экзепшена.

Добавлено через 37 минут
единственное предположение что там какие то непонятки с областью видимости и DownloadFile берёт имя чужого файла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2012, 17:56
Помогаю со студенческими работами здесь

закрытие webclient
Здравствуйте! Я написал програмку, которая подключается к http серверу, скачивает файлы и выводит инву на экран в richTextBox. Вопрос: как...

Threads and WebClient
НЕ могу понять одну вещь, почему при асинхронном скачивании и многопоточности, качается по два файла за раз, хотя должно, как мне кажется,...

Глюки WebCLient'a
Подскажите пожалуйста почему может быть такая тема. Вот примерно такой код public bool GetStr(String url) { ...

WebClient не качает файл
WebClient перестал качать файл, раньше все было отлично а теперь не качает. В чем причина? WebClient cl = new WebClient(); ...

Загрузка файлов WebClient
Имеется WebClient, который через метод OpenReadAsync загружает файл, и производит с ним определенные действия. Данный файл постоянно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru