Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.04.2009, 22:24
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию Сетевой Stream =)

Есть ли какой нибудь исходник для работы с файлами которые находятся в интернете? Работать как с TStream, там Seek CopyFrom Read Write... нужно для многопоточной закачки файла, как в Download Master
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #2  
Старый 12.04.2009, 20:35
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Тебя разделом "Исходники" данного сайта пользоваться научить?
тут посмотри, похоже, то что тебе надо.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 13.04.2009, 05:38
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от popyurv
Тебя разделом "Исходники" данного сайта пользоваться научить?
тут посмотри, похоже, то что тебе надо.
пасыба, просто я как то об основном сайте позабыл, тока форумом пользуюсь
зы: и нефига дутся, невывезбы я такое сразу
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #4  
Старый 26.04.2009, 05:19
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

хм, люди памагите, хочу получить размер файла из интернета, пишу
Код:
var
  url,sess: HINTERNET;
begin
  lblUrlSize.Caption := '0';
  sess := InternetOpen('iexplorer',INTERNET_OPEN_TYPE_PRECONFIG,
    nil,nil,0);
  url := InternetOpenUrl(sess,pchar('http://'+edtUrl.Text),nil,0,0,0);
  try
    // working
    if(url=nil)then Exit;
    fs := InternetSetFilePointer(url,0,nil,FILE_END,0);
    lblUrlSize.Caption := FloatToStr(fs)+' bytes';
  finally
    InternetCloseHandle(url);
    InternetCloseHandle(sess);
  end;
когда файл маленький (5-50 кб) он нормально размер получает, но когда например 500 и больше кб, он выводит какие то астрономические цифры. Он измеряет в байтах или битах?
Вот например файл со своего сайта (adworld.ucoz.ru/adworld_soft/quick_menu/QM_13.exe, весит 500 с лишним кб) он пооказывает цифру 4,294,967,295. Я ваще запутался, помогите
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #5  
Старый 26.04.2009, 06:05
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от AleD
хм, люди памагите, хочу получить размер файла из интернета, пишу
Код:
var
  url,sess: HINTERNET;
begin
  lblUrlSize.Caption := '0';
  sess := InternetOpen('iexplorer',INTERNET_OPEN_TYPE_PRECONFIG,
    nil,nil,0);
  url := InternetOpenUrl(sess,pchar('http://'+edtUrl.Text),nil,0,0,0);
  try
    // working
    if(url=nil)then Exit;
    fs := InternetSetFilePointer(url,0,nil,FILE_END,0);
    lblUrlSize.Caption := FloatToStr(fs)+' bytes';
  finally
    InternetCloseHandle(url);
    InternetCloseHandle(sess);
  end;
когда файл маленький (5-50 кб) он нормально размер получает, но когда например 500 и больше кб, он выводит какие то астрономические цифры. Он измеряет в байтах или битах?
Вот например файл со своего сайта (adworld.ucoz.ru/adworld_soft/quick_menu/QM_13.exe, весит 500 с лишним кб) он пооказывает цифру 4,294,967,295. Я ваще запутался, помогите
Упс, извените разобрался, когда размер равен максимому эт значит что файл не найден, виноват uCoz он пряммые ссылки на файл не даёт
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #6  
Старый 26.04.2009, 17:03
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
Счастье Я его всё таки сделал - Сетевой Stream

Тут вот посидел пол часика и сделал его, TNetStream! Для отцов паскаля это не новость, но для меня это маленькая победа . Кароче это потомок TStream, а значит теперь легко можно качать файлы из интернета или даже сделать подобие Download Master'а читая несколькими потоками один файл (функция Seek работает). Не буду жопить, вот исходник класса, создайте файл NetStream.pas в папке Delphi7\Lib и сохраните туда этот текст:
Код:
unit NetStream;

interface

uses Windows, WinInet, Classes;

type
  EInternetStreamError = EStreamError;
  TNetStream = class(TStream)
  private
    fFile, fSession: HINTERNET;
  public
    constructor Create(AUrl: String; AUser: String = ''; APass: String = '');
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    function Seek(Offset: Longint; Origin: Word): Longint; overload;override;
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; override;
  end;

implementation

constructor TNetStream.Create(AUrl: String; AUser: String = ''; APass: String = '');
begin
  inherited Create;
  fSession := InternetOpen(pchar('iexplorer'),INTERNET_OPEN_TYPE_PRECONFIG,nil,
    nil,INTERNET_FLAG_NEED_FILE);
  if(fSession=nil)then
    raise EInternetStreamError.Create('Session can''t create');
  fFile := InternetOpenUrl(fSession,pchar(AUrl),nil,0,INTERNET_FLAG_NEED_FILE,0);
  if(fFile=nil)then
    raise EInternetStreamError.Create('File not found');
end;

destructor TNetStream.Destroy;
begin
  InternetCloseHandle(fFile);
  InternetCloseHandle(fSession);
  inherited Destroy;
end;

function TNetStream.Read(var Buffer; Count: Longint): Longint;
var
  r: Cardinal;
begin
  InternetReadFile(fFile,@Buffer,Count,r);
  Result := r;
end;

function TNetStream.Write(const Buffer; Count: Longint): Longint;
var
  r: Cardinal;
begin
  InternetWriteFile(fFile,@Buffer,Count,r);
  Result := r;
end;

function TNetStream.Seek(Offset: Longint; Origin: Word): Longint;
var
  mm: Cardinal;
begin
  case Origin of
    soFromBeginning: mm := FILE_BEGIN;
    soFromCurrent: mm := FILE_CURRENT;
    soFromEnd: mm := FILE_END;
  else
    mm := FILE_CURRENT;
  end;
  Result := InternetSetFilePointer(fFile,Offset,nil,mm,0);
end;

function TNetStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
var
  mm: Cardinal;
begin
  case Origin of
    soBeginning: mm := FILE_BEGIN;
    soCurrent: mm := FILE_CURRENT;
    soEnd: mm := FILE_END;
  else
    mm := FILE_CURRENT;
  end;
  Result := InternetSetFilePointer(fFile,Offset,nil,mm,0);
end;

end.
Знаю он не идеален, но я впринципе для этого и выложил, что бы все кому он реально поможет улучшали его. Например следущее что ему нужно это поддержка прокси серверов. Дерзайте, пусть наши проги станут ближе к миру
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #7  
Старый 08.05.2009, 14:23
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

и снова помогите, со всем что выше мною написано разобрался, теперь проблема в следующем: качаю файл... приостановил, потом при возобновлении он долго думает и минуты через 2 начинает докачивать, в DM он намного шустрее думает, есть решение?
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter