Маэстро
Вирусоборец
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
1

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

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

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

Вопрос у меня такой, как осуществить загрузку текстового файла с сервера напрямую в 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. Но проблема в том, что имя текстового...

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

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

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

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

Решение

Можно через 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
Эксперт С++
3954 / 1809 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
29.11.2010, 16:01 3
Maestro, загрузите файл в поток TMemoryStream и с него уже выполните загрузку в TMemo.
0
Маэстро
Вирусоборец
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
29.11.2010, 16:19  [ТС] 4
Gremlin, Спасибо, ваш вариант работает отлично.

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

но как то так:
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
Эксперт С++
3954 / 1809 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
29.11.2010, 17:16 6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от 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
Gremlin
29.11.2010, 17:19
  #7

Не по теме:

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru