Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
ВнизКопирование файлов с HTTP ресурса Найти похожие ветки
← →
zdm77 (2008-07-17 13:52) [0]Добрый день.
Есть файл на http ресурсе, допустим http://www.qqq.qqq/1.txt, проверкой в браузере, все в порядке, доступ есть, предлогает сохранить...
Как средствами Delphi, если это возможно произвести копирование с http на локальный ресурс?
Спасибо.
← →
Palladin © (2008-07-17 13:53) [1]idhttp
← →
zdm77 (2008-07-17 14:07) [2]
> Palladin © (17.07.08 13:53) [1]
Пока искал про idhttp наткнулся на использование-Wininet.. Как Ваше мнение как мастера, что лучше?
← →
Palladin © (2008-07-17 14:10) [3]в конкретно твоем случае: idhttp, другие случаи нужно рассматривать отдельно. например по поводу https, могу однозначно сказать, что лучше и проще использовать WinInet
← →
zdm77 (2008-07-17 16:13) [4]
> Palladin ©
Пишет что не может создать путь, при попытке создания процесса... с процессами и "прогрессами" разберусь. В INDY всегда свои заморочки. Если Вам не сложно или кому-то еще приведите пожалуйста пример простого кода копирования с http.
Спасибо.
← →
Поросенок Винни-Пух © (2008-07-17 16:18) [5]idhttp1.get("http://www.qqq.qqq/1.txt",MyFileStream);
← →
zdm77 (2008-07-17 16:30) [6]я запутался..и не могу растормозиться.. если Вам не сложно, просто приведите пример кода полностью... я попробовал вот так
//процесс (TThread созданый)
procedure TDownLoader.Execute;
var
http:TIdHTTP;
str:TFileStream;
begin
//Создим класс для закачки
http:=TIdHTTP.Create(nil);
//Поток для сохранения
str:=TFileStream.Create(ToFolder, fmCreate); //вот сдесь ошибка (что значит что нет доступа? или просто я действительно встал в ступор...просто прошу помощи, код для вызова этого процесса дальше)
try
//Качаем
http.Get( url,str);
finally
//чистим
http.Free;
str.Free;
end;
//код для вызова из формы
procedure TFormCountrys.ToolButtonImportClick(Sender: TObject);
var d:TDownLoader;
begin
//Создадим класс потока.
//Поток для начала будет остановлен
d:=TDownLoader.Create(true);
//Передадим параметры потоку
d.URL:="http://www.qqq.qqq/1.txt";
d.ToFolder:="c:\1";
//Поток должен удалить себя по завершению своей работы
d.FreeOnTerminate:=true;
//И запустим его на закачку.
d.Resume;
end;
← →
Поросенок Винни-Пух © (2008-07-17 16:31) [7]что значит что нет доступа?
доступа нет значит.
← →
zdm77 (2008-07-17 16:39) [8]дык это локальный ресурс... путь C:\1 существует и на него к нему я имею полный доступ..что-то в коде не так... приведите пожалуйста пример, без всяких потоков и прочего, с этим я разберусь потом, просто скопировать с ресурса http на локальный ресурс. Спасибо
← →
Поросенок Винни-Пух © (2008-07-17 16:41) [9]ну тогда у тебя все ок. доступ есть и файл скачивается.
поздравляю.
← →
zdm77 (2008-07-17 16:43) [10]
> Поросенок Винни-Пух © (17.07.08 16:41) [9]
ну не скачивается, выдается сообщение что не может создать файл по пути "c:\1" .. да и любой другой тоже самое...
← →
Поросенок Винни-Пух © (2008-07-17 16:44) [11]обман зрения. доступ у тебя есть же.
← →
zdm77 (2008-07-17 16:47) [12]
> Поросенок Винни-Пух © (17.07.08 16:44) [11]
> обман зрения. доступ у тебя есть же.
Если тебе не сложно, напиши кодик скачивания через Indy любого файла через HTTP и приведи пожалуйста и тогда все станет ясно и не будем гнать пургу..если не скачивается значит не скачивается, я пишу что отвечает ОС и среда разработки... ну чо издеваться то?
← →
Поросенок Винни-Пух © (2008-07-17 16:47) [13]если доступ есть, а файл не создается, то иногда помогает более сильное и резкое нажатие на button1 под которой код создания файла.
на сотый раз обычно помогает стопроцентоно.
← →
Поросенок Винни-Пух © (2008-07-17 16:49) [14]если не скачивается значит не скачивается
До скачивания тебе еще далеко.
Файл сначала создай.
← →
Поросенок Винни-Пух © (2008-07-17 17:10) [15]Только файл, а не уже существующую папку c:\1
← →
Rouse_ © (2008-07-17 17:30) [16]Я для таких целей обычно использую что-то наподобие вот этого кода: http://rouse.drkb.ru/network.php#proxyload
← →
zdm © (2008-07-18 09:55) [17]Всем большое спасибо. разобрался. создав однотипный файл скопирует.... но вот смысл мне не очень понятен, от куда я знаю что лежит на ресурсе, я просто хочу скопировать или я не догоняю...
← →
Поросенок Винни-Пух © (2008-07-18 09:57) [18]от куда я знаю что лежит на ресурсе
ресурс и лежит.
← →
brother © (2008-07-18 10:02) [19]> от куда я знаю что лежит на ресурсе,
что по твоему понятию ресурс?
в данном случае ресурс вот:
> d.URL:="http://www.qqq.qqq/1.txt";
← →
zdm © (2008-07-18 10:03) [20]это понятно, куда копировать вопрос ..в какой файл
← →
zdm © (2008-07-18 10:04) [21]т.е. если источник "http://www.qqq.qqq/1.txt"; это все норм.. а вот куда? он же не папку просит а конкретный файл, например в c:\1.txt ..
← →
brother © (2008-07-18 10:04) [22]к какому обращался, такое же имя и оставляй, если хочещь можещь свое придумать, например ~123.tmp )
← →
Поросенок Винни-Пух © (2008-07-18 10:06) [23]это понятно, куда копировать вопрос ..в какой файл
копируй в c:\какой_файл.txt
← →
brother © (2008-07-18 10:06) [24]> он же не папку просит а конкретный файл
правильно, он же не знает что за тип файла скачивается и ты это должен проконтролировать...
← →
zdm © (2008-07-18 10:07) [25]но если я говорю что копируй в c:\1.txt, то его нужно сначала создать, но это маразм какой-то я просто хочу скопировать файл http://www.qqq.qqq/1.txt с темже именем или другим в директорию c:\1 например.
← →
zdm © (2008-07-18 10:08) [26]жесть.. CopyFile("источник","назначение",true) тоже не знает о типе он просто КОПИРУЕТ!!!! это и нужно
← →
brother © (2008-07-18 10:08) [27]> d.URL:="http://www.qqq.qqq/1.txt";
> d.ToFolder:="c:\1\1.txt";
я чет не понял, так чтоли не работает?
← →
brother © (2008-07-18 10:10) [28]> d:TDownLoader;
он наследник чего?
← →
zdm © (2008-07-18 10:14) [29]
> brother © (18.07.08 10:08) [27]
работает, яже написал, но мне, что, нужно CreateFile каждый раз делать, если я просто хочу скопировать
> brother © (18.07.08 10:10) [28]
это поток вызывает.. работает если есть такой файл "c:\1\1.txt"; но я хочу просто с http ресурса скопировать файл в папку c:\1\ с темже что и у источника именем. Директория есть, файлов там может и не быть, точнее их там и не будет, они удаляются перед закачкой, это временная директория, а с http ресурса нужно взять новый файл, который переодически обновляется и положить по этому пути.
← →
Поросенок Винни-Пух © (2008-07-18 10:17) [30]Ну и в чем твоя загвоздка?
← →
Dennis I. Komarov © (2008-07-18 10:18) [31]> [30] Поросенок Винни-Пух © (18.07.08 10:17)
Подозреваю в получении имени файла :)
← →
brother © (2008-07-18 10:18) [32]> procedure TDownLoader.Execute;
> var
> http:TIdHTTP;
> str:TFileStream;
> begin
> //Создим класс для закачки
> http:=TIdHTTP.Create(nil);
> //Поток для сохранения
> str:=TFileStream.Create(ToFolder, fmCreate); //вот сдесь
> ошибка (что значит что нет доступа? или просто я действительно
> встал в ступор...просто прошу помощи, код для вызова этого
> процесса дальше)
> try
> //Качаем
> http.Get( url,str);
> finally
> //чистим
> http.Free;
> str.Free;
> end;
там и имя файла должно быть, я же тебе сказал об этом в [27], погляди выделенное внимательно...
← →
Поросенок Винни-Пух © (2008-07-18 10:19) [33]Эка проблема. Все ссылки у него поди литералы. Имя файла тоже пусть будет литералом.
← →
zdm © (2008-07-18 10:20) [34]пришел к выводу, что просто всетаки создавать на подобии
CreateFile("c:\1\1.txt"), GENERIC_READ,
(FILE_SHARE_READ or FILE_SHARE_WRITE), nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ну а дальше все работает
может и есть где логика тут.. в принципе действительно контроль появляется.
Всем Спасибо еще раз
← →
brother © (2008-07-18 10:20) [35]зы, в данном случае имя файла в TFileStream. передавать это твоя забота...откуда он знает про то что летит из TIdHTTP
← →
brother © (2008-07-18 10:24) [36]> d.ToFolder:="c:\1";
вот назвал его не правильно и путаешься... туда имя файла с путями передавать надо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.048 c