![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Скачиваю 97 картинок с сайта (имена картинок 1,2,3 и т.д. .jpg).Подскажите пожалуйста что не так! скачиваются 97 одинаковых картинок! 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	unit Unit1;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdHttp, jpeg, Vcl.StdCtrls, Vcl.ExtCtrls;
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  http: TIdHttp;
  potok:   TMemoryStream;
  jpeg: TJpegImage;
  i:integer;
begin
  http := TIdHTTP.Create(nil);
  ms := TMemoryStream.Create;
  jpeg := TJpegImage.Create;
   for i:= 1 to 97 do
   begin
     try
       http.Get('//тут источник картинок'+inttostr(i)+'.jpg', potok);
       potok.Position := 0;
       jpeg.LoadFromStream(ms);
      
        jpeg.SaveToFile('c:/jpgimage/'+inttostr(i)+'.jpg');
    finally
    jpeg.Free; ms.Free; http.Free;
    end;
   end;
end;
end. | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Кхм... ну у тебя вообще предствлвенный код не код, а багодром. 
		
	
		
		
		
		
		
	
		
		
	
	
	И это не смотря на то, что имена переменных для потоков попутаны (ну тут подозреваю последствия вырезания кода для поста). А по сути: 1. Не надо повторно использовать объекты. Создавай новые, это не так дорого стоить на современных системах. 2. Try..Finally у тебя является частью цикла, так лучше не делать. 3. Непонятен смысл испльзования промежуточного jpeg, а что, сразу в TFileStream религия не позволяет сохранять? 4. И вообще, такие вещи лучше переписать на многопоточность, не на модемах давно уже сидим, можно качать потоков так в 10, будет качаться раза в 3 быстрее, чем в один поток (да, кода будет чуть поболее, зато быстрее будет).  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
crazyman (10.02.2019)
  | ||
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 это была в общем-то разовая акция, нужно было скачать книжку, которая была картинками представлена, качальщиком сайтов оч. долго, поэтому решил накидать код.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А-а-а... я в подобном случае просто сгенерил html и загрузил его через браузер. Потом просто сохраняешь страничку и забираешь картинки из соотв. папки. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	unit Unit1;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdHttp, jpeg, Vcl.StdCtrls, Vcl.ExtCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
  TForm1 = class(TForm)
    //Image1: TImage;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  http: TIdHttp;
  potok:   TMemoryStream;
  jpeg: TJpegImage;
  i:integer;
begin
  http := TIdHTTP.Create(nil);
  potok := TMemoryStream.Create;
  jpeg := TJpegImage.Create;
     try
      for i:= 1 to 97 do
      begin
       http.Get('http://img.gdz-online.ws/29032018fdfsrt13/'+inttostr(i)+'.jpg', potok);
       potok.Position := 0;
       jpeg.LoadFromStream(potok);
       jpeg.SaveToFile('c:/'+inttostr(i)+'.jpg');
       potok.Clear;
      end;
    finally
    jpeg.Free; potok.Free; http.Free;
    end;
end;
end.Последний раз редактировалось crazyman, 11.02.2019 в 21:28.  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну тогда уж так: 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	procedure TForm1.Button1Click(Sender: TObject);
var
  http: TIdHttp;
  potok:   TFileStream;
  i:integer;
begin
  http := TIdHTTP.Create(nil);
  try
    for i:= 1 to 97 do
    try
      potok := TFileStream.Create('c:/'+inttostr(i)+'.jpg',fmCreate);
      http.Get('http://img.gdz-online.ws/29032018fdfsrt13/'+inttostr(i)+'.jpg', potok);
    finally
      potok.free;	
    end;
  finally
    http.Free;
  end;
end; | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
crazyman (13.02.2019)
  | ||