Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/27: Рейтинг темы: голосов - 27, средняя оценка - 4.93
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Как загрузить текстовый файл с сервера в TStringList или Memo?

29.11.2010, 15:23. Показов 5219. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет друзья.

Вопрос у меня такой, как осуществить загрузку текстового файла с сервера напрямую в Memo или TStringList, минуя промежуточное создание файла на жёском диске.

Пока делаю так, создаю в корне C:, гружу и потом удаляю, но хотелось бы более элегантно это делать. (не забываем подключать к проекту urlmon.lib)
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <urlmon.h>
...
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString strUrl = "http://tools.virusnet.info/drongo/VirusNet-Soft/combain.txt";
  AnsiString str = "C:\\1.txt"; // Адрес куда сохраняем файл
  URLDownloadToFile(NULL, strUrl.c_str(), str.c_str(), NULL, NULL);
  Memo1->Lines->LoadFromFile(str);
  DeleteFile(str);
}
//---------------------------------------------------------------------------
Буду признателен за любую помощь
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2010, 15:23
Ответы с готовыми решениями:

Загрузить текстовый файл в Memo
Задача состоит в том чтобы открыть текстовый файл в memo1. Но проблема в том, что имя текстового файла меняется от 1 до 100, т.е. в папке...

Загрузить в TStringList файл из ListBox
мне нуно связать вот етот код TStringList*list=new TStringList(); list-&gt;LoadFromFile(&quot;dll.txt&quot;); String s1=list-&gt;Strings; String...

Как проверить, существует ли файл и загрузить его в memo?
Как проверить, существует ли файл, и если да, то нужно загрузить его в мемо Делал так:b := tstringlist.Create; a :=...

8
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
29.11.2010, 15:30
Лучший ответ Сообщение было отмечено как решение

Решение

Можно через IdHTTP

C++
1
2
3
4
5
6
7
8
    try
    {
        Memo1->Text = IdHTTP1->Get("http://site.ru/file.txt");
    }
    catch(...)
    {
        // error
    }
вот так лучше будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    int error = 0;
    TStringList *asd = new TStringList;
    IdHTTP1->ConnectTimeout = 2000; // "Time out"
    try
    {
        asd->Text = IdHTTP1->Get("http://site.ru/file.txt");
    }
    catch(...)
    {
        error++;
    }
 
    if(asd->Text.Length() > 1 && error == 0)
    {
        Memo1->Text = asd->Text
        delete asd;
    }
    else
    {
        delete asd;
        ShowMessage("Bad connect...");
    }
2
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
29.11.2010, 16:01
Maestro, загрузите файл в поток TMemoryStream и с него уже выполните загрузку в TMemo.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
29.11.2010, 16:19  [ТС]
Gremlin, Спасибо, ваш вариант работает отлично.

MikeSoft, Ммм... Я неумею работать с потоками. Если не затруднит, покажите как этот участок кода с загрузкой в поток должен выглядеть.
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
29.11.2010, 16:56
Я с потоками тоже не особо дружу

но как то так:
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
//---------------------------------------------------------------------------
AnsiString __fastcall DownloadTextFileX(AnsiString x_url)
{
    int error = 0;
    TStringList *tmp_list = new TStringList;
    Form1->IdHTTP1->ConnectTimeout = 2000; // "Time out"
    try
    {
        tmp_list->Text = Form1->IdHTTP1->Get(x_url);
    }
    catch(...)
    {
        error++;
    }
 
    if(tmp_list->Text.Length() > 1 && error == 0)
    {
        //
    }
    else
    {
        tmp_list->Text = "ERROR!";
    }
    return tmp_list->Text;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()  // THREAD FUNC
{
    // вызываем функцию из потока
    Form1->Memo1->Text = DownloadTextFileX("http://ya.ru/");
}
//---------------------------------------------------------------------------
Добавлено через 3 минуты
Цитата Сообщение от Maestro Посмотреть сообщение
Gremlin, Спасибо, ваш вариант работает отлично.

MikeSoft, Ммм... Я неумею работать с потоками. Если не затруднит, покажите как этот участок кода с загрузкой в поток должен выглядеть.
упс ... невнимательно прочитал пост
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
29.11.2010, 17:16
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Maestro Посмотреть сообщение
Если не затруднит, покажите как этот участок кода с загрузкой в поток должен выглядеть.
Не затруднит.

C++
1
2
3
4
5
6
TMemoryStream *ms = new TMemoryStream();
IdHTTP1->Get("http://msdn.at.ua/1.txt",ms);
ms->Position = soFromBeginning;
Memo1->Lines->LoadFromStream(ms);
delete ms;
ms = NULL;
4
29.11.2010, 17:19

Не по теме:

MikeSoft, у меня к вам вопрос не по теме. Для чего после delete чего либо нужно писать еще NULL (часто видел на этом форуме)? Это получается что delete он не совсем delete?

0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
29.11.2010, 17:27
Цитата Сообщение от Gremlin Посмотреть сообщение
MikeSoft, у меня к вам вопрос не по теме. Для чего после delete чего либо нужно писать еще NULL (часто видел на этом форуме)? Это получается что delete он не совсем delete?
Мне часто задают этот вопрос на форуме, в личных сообщениях и в ICQ ...
Появится свободное время я точно включу данный вопрос в следующее своё FAQ.
Посмотрите вот это сообщение: "Очистка" с помощью delete[]. Думаю, этот пост даст ответ на ваш вопрос
Если появятся какие-то вопросы - задавайте, буду знать, что нужно осветить в статье.
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
29.11.2010, 20:43  [ТС]
MikeSoft, Спасибо большое!

Вопрос успешно решён.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2010, 20:43
Помогаю со студенческими работами здесь

Как загрузить длинный текстовый файл
ЕСть проблема. Длинный txt файл надо загрузить textBox. обычный способ (Open ... Input), который рекомендовал Messir не проходит. Для...

Как загрузить файл в стринглист с сервера
Здравствуйте. Мне уже подсказывали на форуме как это сделать, но я так и не разобрался. Как загрузить файл в стринглист прямо из потока не...

Как загрузить текстовый файл Unicode в Delphi?
Помогите пожалуйста! Мне нужно загружать текстовые файлы в Delphi. Проблема в том, что файлы идут в кодировке Unicode. В кодировке ANSI...

Как загрузить текстовый файл Unicode в Delphi?
Помогите пожалуйста! Мне нужно загружать текстовые файлы в Delphi. Проблема в том, что файлы идут в кодировке Unicode. В кодировке ANSI...

Как сохранить в текстовый файл строки со второй по последнюю из memo?
Как сохранить в текстовый файл строки со второй по последнюю из memo? т.е. все, кроме первой.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru