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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 01.02.2012, 09:27
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

Цитата:
h:HFILE;
ReadLen:Cardinal;
fBuf: array[1..1024] of byte;

m:=1;
nac:=RestartPos-$FFFFFFFF-1;
h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_ NORMAL,0);
p:= SetFilePointer(h,nac,@m, FILE_BEGIN);
InternetReadFile(hURLa, @fBuf, SizeOf(fBuf), ReadLen);
WriteFile(h, fBuf, SizeOf(fBuf), ReadLen,nil); выдаёт 0, ReadLen тоже 0 код ошибки 6 что может быть
p - выдаёт то что надо!
Ответить с цитированием
  #17  
Старый 01.02.2012, 11:58
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

И чему удивляешься? Открываешь файл:
Код:
  h := CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_ NORMAL, 0);
читаешь:
Код:
  InternetReadFile(hURLa, @fBuf, SizeOf(fBuf), ReadLen);
а где его открытие? Естественно, получаешь ошибку о неверном хэдере. Как нам сообщает MSDN, открыть его можно одной из функций: InternetOpenUrl, FtpOpenFile, GopherOpenFile, or HttpOpenRequest.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #18  
Старый 02.02.2012, 09:25
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

Да нет это у меня есть все, ладно вот полный код

Функции потока
Код:
procedure TLoadThread.DownLoadSeg(beg,the:String);
var
  fSize,s4prog:int64; //<-размер файла
  //<-количество реально прочитанных байт
  RestartPos,rdi,fsi,Bfer,p,m,nac: int64	;// //<-|позиция с которой начинается
  //  |докачка
  fBuf0: array[1..512] of byte; //<-буфер куда качаем
  fBuf: array[1..1024] of byte; //<-буфер куда качаем
  fBuf1: array[1..2048] of byte; //<-буфер куда качаем
  Header,ExtraHeader: string; //<-|дополнительная переменная в HTTP
  tex:String;
  ReadLen,ik:Cardinal;
  ElapsedTime,ElapsedDTime:Cardinal;
  za5sec:int64;
  rer:int64;
    rfil,rzfil,prfil,Url:String;
    code: String;
    sizex,indexx:Cardinal;
    h:HFILE;
    lencurl: cardinal;
    aURL,cUrl,pUrl: string;
    per:integer;
    Errsize:Int64;
    sg5,sg4,sg3,nsil,se1:integer;
sl14,sl13,sl10,msl:String;
ltime:TDateTime;
begin
  if Form2.sComboBox8.ItemIndex=0 then Bfer:=512       else
 if Form2.sComboBox8.ItemIndex=1 then Bfer:=1024       else
 if Form2.sComboBox8.ItemIndex=2 then Bfer:=2048;
    if Form1.sCheckBox2.Checked=true then begin
    ExtraHeader:=#13+Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[13];
    end else begin
    ExtraHeader:='';
    end;
    if Form1.sCheckBox1.Checked=true then begin
    Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[3]:=AutoStr;
    ExtraHeader:=Autorization('http://'+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+'/login.php','login='+Form1.sEdit5.Text+'&password='+Form1.sEdit6.Text,'POST');
    Form1.sMemo1.Lines.Add(ExtraHeader);
    Form1.sMemo1.Lines.Add('http://'+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+'/login.php?login='+Form1.sEdit5.Text+'&password='+Form1.sEdit6.Text);
    end;
    rer:=0;
    s4prog:=0;
    za5sec:=0;
    ok:=1;
    se1:=0;
    RestartPos :=StrToInt64(beg);
     stopnew[DownNumber]:=false;
     size:=RestartPos;
     ty:=StrToInt64(the);
     fSize:=ty - RestartPos;
     tex:=Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[10];
if FileExists(tex) then
  begin
  //  AssignFile(f,tex);
   // Reset(f,1);
   m:=1;
   nac:=RestartPos-$FFFFFFFF-1;
  h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
   p:= SetFilePointer(h,nac,@m, FILE_BEGIN);
   // Seek(f, RestartPos);
  end
  else  begin
    //иначе с начала
   // AssignFile(f,tex);
      h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    if late=0 then begin
  //  Rewrite(f,1);
    h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    end else begin
   nac:=late-$FFFFFFFF-1;
  h:= CreateFileA(PAnsiChar(tex),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
   p:= SetFilePointer(h,nac,@m, FILE_BEGIN);
  //  reset(f,1);
   // Seek(f, late);
    end;
  end;
  if Copy(tex,lastDelimiter('.',tex),Length(tex))='.sdn' then begin
    Form1.sMemo1.Lines.Add(DownSdnStr);
  end else begin
    Form1.sMemo1.Lines.Add(DownFileStr);
  end;
   rfil:='';
  //Пишем дополнительную строку для заголовка
   cUrl:=Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11];
  if Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[12]<>'' then begin
  Header :='Accept: */*'+#13+
'Connection: Keep-Alive '+#13+
  'Referer: '+Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[12]+#13+
  'Range: bytes='+IntToStr(RestartPos)+'-'+IntToStr(ty-1)+#13+
  'Cache-Control: no-cache'+#13+
  'Host: '+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+
  ExtraHeader;
  end else begin
  Header :='Accept: */*'+#13+
'Connection: Keep-Alive '+#13+
  'Range: bytes='+IntToStr(RestartPos)+'-'+IntToStr(ty-1)+#13+
  'Cache-Control: no-cache'+#13+
  'Host: '+GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11])+
  ExtraHeader;
  end;
  //открываем URL
    sizex:=256;
    indexx:=256;
   lencurl:=INTERNET_MAX_URL_LENGTH;
SetLength(aURL, lencurl);
InternetCanonicalizeUrl(PChar(cURL),PChar(aURL),lencurl,ICU_BROWSER_MODE);
  Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[3]:=KachStr;
    hURLa := InternetOpenUrl(hIneta,
    PChar(aURL),
    pchar(Header),
    StrLen(pchar(Header)),
   INTERNET_FLAG_PRAGMA_NOCACHE  or INTERNET_FLAG_RELOAD ,                            // INTERNET_FLAG_EXISTING_CONNECT
    0);
   pUrl:=Copy(aURL,Length(GetHostName(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11]))-1,Length(aUrl));
         Form1.sMemo1.Lines.Add(KachStr+': '+cUrl);
    latetime:=now();
    ltime:=now();
    Form1.sMemo1.Lines.Add(BegStr+' '+IntToStr(RestartPos));
    Form1.sMemo1.Lines.Add(DownStr+' '+IntToStr(nseg)+' '+SStr);
      Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[3]:=DownStr;
  while stopnew[DownNumber]<>true do
  begin
    //читаем в буфер
  if pausenew[DownNumber]<>true then
  begin
    if Form2.sTrackBar2.Position>0 then  Sleep(Form2.sTrackBar2.Position);
      if Bfer=2048 then      InternetReadFile(hURLa, @fBuf1, SizeOf(fBuf1), ReadLen) else //<-пишем в файл
  if Bfer=512 then      InternetReadFile(hURLa, @fBuf0, SizeOf(fBuf0), ReadLen) else
  begin InternetReadFile(hURLa, @fBuf, SizeOf(fBuf), ReadLen);
  end;
   rdi:=ReadLen;
    fsi:=fSize;
       if (rdi<>Bfer) and (fsi mod Bfer<>rdi) and (fsi<>rdi) and (rdi<>0) then begin        //or ((fsi<>237) and  (s4prog=237)) or (((fsi mod 1024)<>237) and (rdi=237)) then begin
     if Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[16]='' then begin
     if (Errsize=rdi) and  (Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[17]='') then  begin
       Form1.sMemo1.Lines.Add(IntToStr(rdi));
       Form1.sMemo1.Lines.Add(ErrStr);
     termnew[DownNumber]:=true;
     stopnew[DownNumber]:=true;
     Errsize:=0;
     Terminate;
     end else begin
     Errsize:=rdi;
     end;
     end else begin
     try
     zerkala.LoadFromFile(Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[16]);
       msl:=Copy(zerkala.Strings[0],3,5);
          if msl='' then msl:='0';
          nsil:=StrToInt(msl);
     finally
     if nsil>ns+1 then begin
     ns:=ns+1;
     Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[11]:=zerkala.Strings[ns+1];
     Form1.sMemo1.Lines.Add('Старый урл сдох открываем новый с файла зеркал: '+zerkala.Strings[ns+1]);
     InternetCloseHandle(hUrla);
     hURLa := InternetOpenUrl(hIneta,
    PChar(zerkala.Strings[ns+1]),
    pchar(Header),
    StrLen(pchar(Header)),
   INTERNET_FLAG_PRAGMA_NOCACHE  or INTERNET_FLAG_RELOAD ,                            // INTERNET_FLAG_EXISTING_CONNECT
    0);
     end else begin
     Form1.sMemo1.Lines.Add('Зеркала кончились ищем новые ');
     Form1.sComboBox3.Text:=Form1.sListView1.Items.Item[DownNumber].SubItems.Strings[17];
     LinkThried[DownNumber]:=TFireThread.Create(false);
     LinkThried[DownNumber].nm:=DownName;
     LinkThried[DownNumber].FreeOnTerminate:=true;
     ns:=0;
     end;
     end;
     end;
    end else begin
     try
 { if Bfer=2048 then  BlockWrite(f, fBuf1, ReadLen) else //<-пишем в файл
  if Bfer=512 then  BlockWrite(f, fBuf0, ReadLen) else begin
   BlockWrite(f, fBuf, ReadLen);
  end;    }
    if Bfer=2048 then  WriteFile(h, fBuf1,SizeOf(fBuf1), ReadLen,nil) else //<-пишем в файл
  if Bfer=512 then  WriteFile(h, fBuf0, SizeOf(fBuf0), ReadLen,nil) else begin
   WriteFile(h, fBuf, SizeOf(fBuf), ReadLen,nil);
  end;
   Form1.sMemo1.Lines.Add( BoolToStr(WriteFile(h, fBuf, SizeOf(fBuf), ReadLen,nil)));
  Form1.sMemo1.Lines.Add( IntToStr(ReadLen));
   Form1.sMemo1.Lines.Add('Код ошибки: '+IntToStr(GetLastError));
...
end;
При ранешном методе всё работало но не с файлами более 2 гб
Ответить с цитированием
  #19  
Старый 02.02.2012, 17:43
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

Понял вроде в чем дело опять этот дурацкий WideString, tex переделал на AnsiString и усё!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter