so hier is nun mal nen beispielcode wo du sehen kannst wie man feststellt ob es das file gibt oder nit.
Gib in dem StringGadget einfach ne URL zu nem File an und downloade.
Du wirst sehen das das geht, wenn du jetzt die selbe URL nimmst jedoch die endung des files in der URL weg läst und willst Downloaden bekommst du ne Errormessage da es das File ja so nit gibt.
Code: Alles auswählen
;# 30.09.2006
;# By Nico Grüner
;# for german purebasic form
#File_Download = 0
#INTERNET_OPTION_CONNECT_TIMEOUT = $2
Procedure DownloadEvents()
msg.MSG
If PeekMessage_(msg,0,0,0,1)
TranslateMessage_(msg)
DispatchMessage_(msg)
Else
Sleep_(1)
EndIf
EndProcedure
Procedure.s GetQueryInfo(hHttpRequest.l, iInfoLevel.l)
sBuffer.s = ""
lBufferLength.l=0
lBufferLength = 1024
sBuffer=Space(lBufferLength)
HttpQueryInfo_(hHttpRequest, iInfoLevel, sBuffer, @lBufferLength, 0)
ProcedureReturn Left(sBuffer, lBufferLength)
EndProcedure
Procedure.b DownloadToFile(FileSave.s, URL.s)
isLoop.b=1
Bytes.l=0
fBytes.l=0
Buffer.l=524288
res.s=""
Protected tmp.s, queryinfo.s
tmp=""
myMax = 0
OpenType.b=1
ProxyServer.s = ""
Bypass.s = ""
INTERNET_FLAG_RELOAD.l = $80000000
INTERNET_DEFAULT_HTTP_PORT.l = 80
INTERNET_SERVICE_HTTP.l = 3
HTTP_QUERY_STATUS_CODE.l = 19
HTTP_QUERY_STATUS_TEXT.l = 20
HTTP_QUERY_RAW_HEADERS.l = 21
HTTP_QUERY_RAW_HEADERS_CRLF.l = 22
mem =AllocateMemory(Buffer)
opt_mem=AllocateMemory(4)
PokeL(opt_mem,10000)
hInet = InternetOpen_("SkyBeat", OpenType, ProxyServer, Bypass, 0)
temp_result_inet = InternetSetOption_(hInet,#INTERNET_OPTION_CONNECT_TIMEOUT,opt_mem,4)
hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INTERNET_FLAG_RELOAD, 0)
If hURL = 0
MessageRequester("Error", "Unable to load server datas from "+URL+" !",0)
FreeMemory(mem)
FreeMemory(opt_mem)
ProcedureReturn #False
EndIf
domain.s = ReplaceString(Left(URL,(FindString(URL, "/",8) - 1)),"http://","")
hInetCon = InternetConnect_(hInet,domain, INTERNET_DEFAULT_HTTP_PORT, #Null, #Null, INTERNET_SERVICE_HTTP, 0, 0)
If hInetCon > 0
hHttpOpenRequest = HttpOpenRequest_(hInetCon, "HEAD", ReplaceString(URL,"http://"+domain+"/",""), "http/1.1", #Null, 0, INTERNET_FLAG_RELOAD, 0)
If hHttpOpenRequest > 0
iretval = HttpSendRequest_(hHttpOpenRequest, #Null, 0, 0, 0)
If iretval > 0
tmp = GetQueryInfo(hHttpOpenRequest, HTTP_QUERY_STATUS_CODE)
queryinfo = Trim(tmp)
Debug queryinfo
If Trim(tmp) = "200" Or Trim(tmp) = "400"
tmp = GetQueryInfo(hHttpOpenRequest, HTTP_QUERY_RAW_HEADERS_CRLF)
If FindString(tmp,"Content-Length:",1)>0
ii.l=FindString(tmp, "Content-Length:",1) + Len("Content-Length:")
tmp = Mid(tmp, ii, Len(tmp)-ii)
myMax = Val(Trim(tmp))
EndIf
EndIf
EndIf
EndIf
Else
MessageRequester("Error","No connection found",0)
FreeMemory(mem)
FreeMemory(opt_mem)
ProcedureReturn #False
EndIf
If queryinfo = "404" ;das file gibt es nicht und kann somit nicht geladen werden
MessageRequester("Info","No file for download found! "+Chr(10)+URL,0)
FreeMemory(mem)
FreeMemory(opt_mem)
ProcedureReturn #False
EndIf
If myMax = 0 ;das file gibt es nicht und kann somit nicht geladen werden
MessageRequester("Info","No file for download found! "+Chr(10)+URL,0)
FreeMemory(mem)
FreeMemory(opt_mem)
ProcedureReturn #False
Else
SetGadgetAttribute(2,#PB_ProgressBar_Maximum,myMax)
EndIf
Result = CreateFile(#File_Download, FileSave)
If Result = 0
MessageRequester("Error","Can`t create and save the file "+FileSave,2)
FreeMemory(mem)
FreeMemory(opt_mem)
ProcedureReturn #False
EndIf
Repeat
InternetReadFile_(hURL, mem, Buffer, @Bytes)
If Bytes = 0
isLoop=0
Else
fBytes=fBytes+Bytes
If myMax >= fBytes
Debug "MyMax = "+Str(myMax)
Debug "fbytes = "+Str(fBytes)
prozent.f = (fBytes/myMax)*100
SetGadgetText(1,Str(fBytes)+" bytes or "+StrF(prozent,1)+"% downloadet")
SetGadgetState(2, fBytes)
EndIf
WriteData(#File_Download,mem, Bytes)
EndIf
DownloadEvents()
Until isLoop=0
InternetCloseHandle_(hURL)
InternetCloseHandle_(hInet)
SetGadgetState(2,0)
FreeMemory(mem)
FreeMemory(opt_mem)
ProcedureReturn #True
EndProcedure
OpenWindow(0,0,0,400,100,"DownloadTest",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
StringGadget(0,5,5,390,20,"")
TextGadget(1,5,30,290,15,"")
ProgressBarGadget(2,5,50,390,15,0,100)
ButtonGadget(3,150,75,100,20,"Download")
Repeat
Event = WaitWindowEvent(10)
If Event = #PB_Event_Gadget
GadgetID = EventGadget()
If GadgetID = 3
If GetGadgetText(0) <> ""
;nachfolgend evt. den filetyp fürs saven anpassen!!!!
DownloadToFile("c:\my_app.exe", GetGadgetText(0))
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow