windows – 如何通过HTTP从Internet检索文件?
|
我想从Internet下载文件,InternetReadFile乍一看似乎是一个很好的简单解决方案.实际上,太好了,不可能.实际上,挖掘一下我已经开始看到它实际上存在很多问题.使用此代码时,人们会抱怨所有类型的问题.
出现问题是因为: >应用程序暂时冻结,直到HTTP服务器响应 我找不到一个关于如何正确和稳健地使用它的完整示例.有没有人知道如何在一个单独的线程中实现它并且超时?还有另一种简单的方法可以从Internet健壮地下载文件.虽然我不想让像Jedi甚至Indy这样的大型图书馆复杂化我的生活. function GetFileHTTP (const fileURL,FileName: String): boolean;
CONST
BufferSize = 1024;
VAR
hSession,hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
// result := false;
sAppName := ExtractFileName(Application.ExeName) ;
hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil,0) ; { be aware that InternetOpen need only be called once in your application!!!!!!!!!!!!!! }
TRY
hURL := InternetOpenURL(hSession,PChar(fileURL),0) ;
TRY
AssignFile(f,FileName) ;
Rewrite(f,1) ;
REPEAT
InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);
BlockWrite(f,Buffer,BufferLen)
UNTIL BufferLen = 0;
CloseFile(f) ;
Result:= True;
FINALLY
InternetCloseHandle(hURL)
end
FINALLY
InternetCloseHandle(hSession)
END;
END;
编辑: { Are we connected to the Internet? }
function IsConnectedToInternet: Boolean; { Call SHELL32.DLL for Win < Win98 otherwise call URL.dll }
var InetIsOffline: function(dwFlags: DWORD): BOOL; stdcall;
begin
Result:= FALSE;
if IsApiFunctionAvailable('URL.DLL','InetIsOffline',@InetIsOffline)
then Result:= NOT InetIsOffLine(0)
else
if IsApiFunctionAvailable('SHELL32.DLL',@InetIsOffline)
then Result:= NOT InetIsOffLine(0)
end;
我正在使用Delphi 7.非常感谢. 编辑: 由于应用程序在首次启动时挂起而失去客户是亏本的完美配方. 编写代码依赖于Microsoft平台是很糟糕的.您永远不知道客户是否安装了IE版本x.x. 将东西安装到用户的计算机就像玩枪.这会适得其反. (详情请见此处:http://thesunstroke.blogspot.com/2010/06/programmig-like-there-is-no-ms-windows.html)
我基本上和你一样.对我来说,它的工作相当完美.
我的代码和代码之间的唯一区别是我有一个INTERNET_FLAG_RELOAD参数来强制从文件而不是缓存下载.你可以尝试一下,看看它是否更好: hURL := InternetOpenURL(hSession,INTERNET_FLAG_RELOAD,0) ; 在下载之前还要检查互联网连接.做这个: dwConnectionTypes := INTERNET_CONNECTION_MODEM
+ INTERNET_CONNECTION_LAN
+ INTERNET_CONNECTION_PROXY;
InternetConnected := InternetGetConnectedState(@dwConnectionTypes,0);
if InternetConnected then ...
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows上的python libclang绑定无法从sublime文
- Windows – 远程桌面客户端找不到远程计算机
- windows – $PATH或/ usr5bin中没有可用的M4
- windows – 用于映射网络驱动器的脚本
- go 调用windows dll 的三种方法
- 将函数指针作为参数传递给dll函数并从dll内部调用
- windows server 7月更新导致exchange的问题
- windows – DTCPing和DTCTester有什么区别?
- windows-server-2008 – DFS:文件随机丢失?
- active-directory – 如果没有Microsoft帐户,Win
