|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Цитата:
|
#17
|
||||
|
||||
И чему удивляешься? Открываешь файл:
Код:
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); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#18
|
|||
|
|||
Да нет это у меня есть все, ладно вот полный код
Функции потока Код:
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; |
#19
|
|||
|
|||
Понял вроде в чем дело опять этот дурацкий WideString, tex переделал на AnsiString и усё!
|