Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1215167631
Elster
2008-07-04 14:33
2008.08.24
Ищем программиста Delphi/Oracle. Киев


6-1192557976
Rembo
2007-10-16 22:06
2008.08.24
TIdIcmpClient количество посланных байт


2-1216372224
programmer90
2008-07-18 13:10
2008.08.24
Как притормозить выполнение след. оператора


2-1216129529
ЗФдЗФднсп
2008-07-15 17:45
2008.08.24
Освобождение .xls файла


2-1216223291
blazerad
2008-07-16 19:48
2008.08.24
можно ли сделать чтобы введенные данные не исчезали после пе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский