Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать размер файла, Помогите 
:(
    Опции темы
ivan219
  Дата 25.2.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Вобщем вот что я хочш зделать надо скочать фаил из сети это отдельная тема но когда он сохроняется на жостком диске мне надо знать его размер пречём постоянно т.е. в процесе закачки я хочу зделать визуальный контроль на основе Gauge1 или ProgressBar1 вобщем тут надо знать его весь размер и его размер на диске спервой задачей я разобрался а вот вторая проблемотично помогит решить эту проблему smile
PM MAIL ICQ   Вверх
Guedda
Дата 25.2.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



А чем отличается
Цитата

его весь размер

от
Цитата

его размер на диске

???


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
bems
Дата 25.2.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



считай сколько успел закачать
Добавлено @ 16:34
Хотя єто будет без учета того что еще не скинуто из буфера на диск...
Добавлено @ 16:37
тогда GetFileSize


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ivan219
Дата 25.2.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Guedda отличается когда он закачевается а когда полностью скачался то нечем неотличается вот мне надо знать когда он закачевается чтоб следить за его размером динамически до конца закачки.

bems а если есть ещё потоки они будут учитыватся и если можеш покажи премер smile
PM MAIL ICQ   Вверх
Guedda
Дата 25.2.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



В общем, тебе необходимо узнать в начале скачивания размер файла. Правильно я понял?
Так вот:
Код

function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string): 
string;
var
  hSession, hFile: hInternet;
  dwBuffer: Pointer;
  dwBufferLen, dwIndex: DWORD;
begin
  Result := '';
  hSession := InternetOpen('STEROID Download',
                           INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(hSession) then begin
    hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
                             INTERNET_FLAG_RELOAD, 0);
    dwIndex  := 0;
    dwBufferLen := 20;
    if HttpQueryInfo(hFile, dwInfoLevel, @dwBuffer, dwBufferLen, dwIndex)
      then Result := PChar(@dwBuffer);
    if Assigned(hFile) then InternetCloseHandle(hFile);
    InternetCloseHandle(hsession);
  end;
end;


Использование:
Код

s := GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, 'http://some.com/some.zip');
ShowMessage('Размер файла' + s);



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
bems
Дата 25.2.2006, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



GetFileSize - размер НА ДИСКЕ. Что ты там качаешь и из какого потока все равно.
Описание в хелпе


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Poseidon
Дата 26.2.2006, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



ivan219, как кочаешь? Покажи код. Если с помощью Indy, то там очень просто отслеживать количество скачанного и без проверки диска.

PS.
Код
function GetFileSize(FileName: TFileName): integer;
var SearchRec: TSearchRec;
begin
if FindFirst(FileName, faAnyFile, SearchRec) = 0
then Result:= SearchRec.Size;
FindClose(SearchRec);
end;


Запусти в цикле (не забывай Application.ProcessMessages на всякий случай smile) или по таймеру пока качается файл. В FileName передаешь свой "недокаченный" файл.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ivan219
  Дата 26.2.2006, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Да спосибо подумаю.

Вот код он так тестовый но зато работает и спроверкой правда неудобный.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,URLMon, ShellApi, StdCtrls, Gauges, wininet;

type
  TFormDownload = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Label2: TLabel;
    function DownloadFile(SourceFile, DestFile: string): Boolean;
    function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string):string;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    function Download: boolean;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormDownload: TFormDownload;

implementation

{$R *.dfm}

function TFormDownload.DownloadFile(SourceFile, DestFile: string): Boolean;
begin
  try 
    Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0; 
  except
    Result := False;
  end; 
end;

function TFormDownload.GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string):string;
var
  hSession, hFile: hInternet;
  dwBuffer: Pointer;
  dwBufferLen, dwIndex: DWORD;
begin
  Result := '';
  hSession := InternetOpen('STEROID Download',
                           INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(hSession) then begin
    hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
                             INTERNET_FLAG_RELOAD, 0);
    dwIndex  := 0;
    dwBufferLen := 20;
    if HttpQueryInfo(hFile, dwInfoLevel, @dwBuffer, dwBufferLen, dwIndex)
      then Result := PChar(@dwBuffer);
    if Assigned(hFile) then InternetCloseHandle(hFile);
    InternetCloseHandle(hsession);
  end;
end;

procedure TFormDownload.Button1Click(Sender: TObject);
const
  SourceFile = 'http://calculator2006.narod.ru/txt.rar';
  DestFile = '\txt.rar';
var
 S:String;
begin
  if Download then
  begin
  if DownloadFile(SourceFile, DestFile) then
  begin
   // ShowMessage('Âû õîòèòå çàãðóçèòü ôàèë txt.rar'+' '+S+' '+'Áàéò');
    ShellExecute(Application.Handle, PChar('open'), PChar(DestFile),PChar(''), nil, SW_NORMAL);
  end
  else 
    ShowMessage('Error while downloading ' + SourceFile)
  end
end;

function TFormDownload.Download;
begin
    //
end;

procedure TFormDownload.Button2Click(Sender: TObject);
var
  F : textfile;
  S,Text1:String;
begin
    AssignFile(F,'Download.ini');
    Reset(F);
    Read(F,Text1);
    if Text1='' then
     begin
      CloseFile(F);
      AssignFile(F,'Download.ini');
      Rewrite(F);
      S:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, 'http://calculator2006.narod.ru/txt.rar');
      Write(F,S);
      Label1.Caption:=S;
      Label2.Caption:='Çàãðóçèòü ôàèë';
      Button1.Visible:=True;
      CloseFile(F);
     end
     else
      begin
       S:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, 'http://calculator2006.narod.ru/calculator.rar');
       if StrToInt(S)>StrToInt(Text1) then
        begin
         CloseFile(F);
         AssignFile(F,'Download.ini');
         Rewrite(F);
         Write(F,S);
         label1.Caption:='Ðàçìåð'+' '+S;
         Label2.Caption:='Çàãðóçèòü ôàèë';
         Button1.Visible:=True;
         CloseFile(F);
        end
       else
        begin
         Label2.Caption:='Óâàñ ïîñëåäíÿÿ âåðñèÿ';
         Label1.Caption:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, 'http://calculator2006.narod.ru/calculator.rar');
        end;
      end;
end;
end.




А поповоду Indi можеш поподробнее smile

Это сообщение отредактировал(а) ivan219 - 26.2.2006, 03:52
PM MAIL ICQ   Вверх
Snowy
Дата 26.2.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



PM MAIL   Вверх
Poseidon
Дата 26.2.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(ivan219 @ 26.2.2006, 02:50 Найти цитируемый пост)
А поповоду Indi можеш поподробнее
Могу, но тут надо определится по какому протоколу качать будем. Http, Ftp, Https.... smile



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ivan219
Дата 26.2.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.