⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 010.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
📖 第 1 页 / 共 4 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;这个指针扮演一个您正在使用的不同的因特网服务的句柄的角色。获得了这个句柄之&nbsp;&nbsp;后,你应当把它作为第一个参数传递给在这个进程周期[注:指FTP的整个存在时间(译者&nbsp;&nbsp;)]中调用的其他WININET函数。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;您要记住的适当您在使用它的时间内要把句柄返回给系统,通常是通过调用&nbsp;&nbsp;&nbsp;WININET&nbsp;函数InternetCloseHandle&nbsp;来实现:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;InternetCloseHandle(hInet:&nbsp;HINTERNET):&nbsp;BOOL;&nbsp;stdcall;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了让一个WININET进程开始,您调用&nbsp;InternetOpen&nbsp;:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;InternetOpen(lpszCallerName:&nbsp;PChar;&nbsp;dwAccessType:&nbsp;DWORD;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;lpszServerName:&nbsp;PChar;&nbsp;nServerPort:&nbsp;INTERNET_PORT;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;dwFlags:&nbsp;DWORD):&nbsp;HINTERNET;&nbsp;stdcall;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;第一个参数时打开这个进程的应用程序的名字。您可以在这个参数中传递任何您所要&nbsp;&nbsp;的任意符串。微软公司的文献声称&quot;这个名字作为HTTP协议中的用户代理器的名字而被使&nbsp;&nbsp;用&quot;。这个保留的参数可以设为0或空。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
var&nbsp;&nbsp;<br>
&nbsp;&nbsp;MyHandle:&nbsp;HINTERNET;&nbsp;&nbsp;<br>
…&nbsp;&nbsp;<br>
begin&nbsp;&nbsp;<br>
&nbsp;&nbsp;MyHandle&nbsp;:=&nbsp;InternetOpen('MyApp',&nbsp;0,&nbsp;nil,&nbsp;0,&nbsp;0);&nbsp;&nbsp;<br>
end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;如果您想要关于这个函数的更多信息,从&nbsp;www.microsoft.com&nbsp;那里下载&nbsp;&nbsp;&nbsp;WININET.HLP&nbsp;。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;打开了这这个进程之后,下一步是通过&nbsp;InternetConnect&nbsp;函数来连接到服务器上。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;InternetConnect(&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;hInet:&nbsp;HINTERNET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Handle&nbsp;from&nbsp;InternetOpen&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;lpszServerName:&nbsp;PChar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Server:&nbsp;i.e.,&nbsp;www.borland.com&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;nServerPort:&nbsp;INTERNET_PORT;&nbsp;//&nbsp;Usually&nbsp;0&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;lpszUsername:&nbsp;PChar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;usually&nbsp;anonymous&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;lpszPassword:&nbsp;PChar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;usually&nbsp;your&nbsp;email&nbsp;address&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;dwService:&nbsp;DWORD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;FTP,&nbsp;HTTP,&nbsp;or&nbsp;Gopher?&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;dwFlags:&nbsp;DWORD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Usually&nbsp;0&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;dwContext:&nbsp;DWORD):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;User&nbsp;defined&nbsp;number&nbsp;for&nbsp;callback&nbsp;&nbsp;<br>
HINTERNET;&nbsp;stdcall;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;这里有三个可能的可以通过&nbsp;dwService&nbsp;参数传递的自说明旗标,它们是互斥的:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
INTERNET_SERVICE_FTP&nbsp;&nbsp;<br>
INTERNET_SERVICE_GOPHER&nbsp;&nbsp;<br>
INTERNET_SERVICE_HTTP&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;下面是&nbsp;dwFlags&nbsp;参数的选择:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
INTERNET_CONNECT_FLAG_PASSIVE&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;这个选项仅当您在前一个参数中传递了&nbsp;INTERNET_SERVER_FTP&nbsp;才有效。这时候这个&nbsp;&nbsp;参数没有其他有效的选项。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;如果这个进程成功的话会返回一个有效的指针,否则它返回空。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
连接上之后&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;当您连接上之后,您可以调用来&nbsp;GetCurrentDirectory&nbsp;获得当前的路径的名字:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;TMyFtp.GetCurrentDirectory:&nbsp;string;&nbsp;&nbsp;<br>
var&nbsp;&nbsp;<br>
&nbsp;&nbsp;Len:&nbsp;Integer;&nbsp;&nbsp;<br>
&nbsp;&nbsp;S:&nbsp;string;&nbsp;&nbsp;<br>
begin&nbsp;&nbsp;<br>
&nbsp;&nbsp;Len&nbsp;:=&nbsp;0;&nbsp;&nbsp;<br>
&nbsp;&nbsp;ftpGetCurrentDirectory(FFTPHandle,&nbsp;PChar(S),&nbsp;Len);&nbsp;&nbsp;<br>
&nbsp;&nbsp;SetLength(S,&nbsp;Len);&nbsp;&nbsp;<br>
&nbsp;&nbsp;ftpGetCurrentDirectory(FFTPHandle,&nbsp;PChar(S),&nbsp;Len);&nbsp;&nbsp;<br>
&nbsp;&nbsp;Result&nbsp;:=&nbsp;S;&nbsp;&nbsp;<br>
end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
这个函数声明如下:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;FtpGetCurrentDirectory(&nbsp;&nbsp;<br>
&nbsp;&nbsp;hFtpSession:&nbsp;HINTERNET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;handle&nbsp;from&nbsp;InternetConnect&nbsp;&nbsp;<br>
&nbsp;&nbsp;lpszCurrentDirectory:&nbsp;PChar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;directory&nbsp;returned&nbsp;here&nbsp;&nbsp;<br>
&nbsp;&nbsp;var&nbsp;lpdwCurrentDirectory:&nbsp;DWORD):&nbsp;//&nbsp;buf&nbsp;size&nbsp;of&nbsp;2nd&nbsp;parameter&nbsp;&nbsp;<br>
BOOL;&nbsp;stdcall;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;True&nbsp;on&nbsp;success&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;如果您把最后一个参数设为0,那么WININET会使用这个参数来返回路径字符串的长度&nbsp;&nbsp;。接着您可以为您的字符串分配内存,也可以在调用一次这个函数来获得路径的名字。这&nbsp;&nbsp;个过程在上面的方法中已经演示过了。(注意到*设定长度*的那个调用,Delphi&nbsp;&nbsp;&nbsp;要求您在类似这样的情况下为新的长字符串分配内存!这是因为这个字符串必须在操作系&nbsp;&nbsp;统中指定值,而不是在&nbsp;Delphi&nbsp;应用程序中指定。结果就是Delphi&nbsp;不能在类似的情况下&nbsp;&nbsp;像它通常那样悄悄地为字符串分配内存)&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;下面是返回在特定路径下当前可用的文件的一系列函数:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;GetFindDataStr(FindData:&nbsp;TWin32FindData):&nbsp;string;&nbsp;&nbsp;<br>
var&nbsp;&nbsp;<br>
&nbsp;&nbsp;S:&nbsp;string;&nbsp;&nbsp;<br>
&nbsp;&nbsp;Temp:&nbsp;string;&nbsp;&nbsp;<br>
begin&nbsp;&nbsp;<br>
&nbsp;&nbsp;case&nbsp;FindData.dwFileAttributes&nbsp;of&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_ARCHIVE:&nbsp;S&nbsp;:=&nbsp;'A';&nbsp;&nbsp;<br>
//&nbsp;&nbsp;FILE_ATTRIBUTE_COMPRESSED:&nbsp;S&nbsp;:=&nbsp;'C';&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_DIRECTORY:&nbsp;S&nbsp;:=&nbsp;'D';&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_HIDDEN:&nbsp;S&nbsp;:=&nbsp;'H';&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_NORMAL:&nbsp;S&nbsp;:=&nbsp;'N';&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_READONLY:&nbsp;S&nbsp;:=&nbsp;'R';&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_SYSTEM:&nbsp;S&nbsp;:=&nbsp;'S';&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;FILE_ATTRIBUTE_TEMPORARY:&nbsp;S&nbsp;:=&nbsp;'T';&nbsp;&nbsp;<br>
&nbsp;&nbsp;else&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;:=&nbsp;IntToStr(FindData.dwFileAttributes);&nbsp;&nbsp;<br>
&nbsp;&nbsp;end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;S&nbsp;:=&nbsp;S&nbsp;+&nbsp;GetDots(75);&nbsp;&nbsp;<br>
&nbsp;&nbsp;Move(FindData.CFilename[0],&nbsp;S[6],&nbsp;StrLen(FindData.CFileName));&nbsp;&nbsp;<br>
&nbsp;&nbsp;Temp&nbsp;:=&nbsp;IntToStr(FindData.nFileSizeLow);&nbsp;&nbsp;<br>
&nbsp;&nbsp;Move(Temp[1],&nbsp;S[25],&nbsp;Length(Temp));&nbsp;&nbsp;<br>
&nbsp;&nbsp;Result&nbsp;:=&nbsp;S;&nbsp;&nbsp;<br>
end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;TMyFtp.FindFiles:&nbsp;TStringList;&nbsp;&nbsp;<br>
var&nbsp;&nbsp;<br>
&nbsp;&nbsp;FindData:&nbsp;TWin32FindData;&nbsp;&nbsp;<br>
&nbsp;&nbsp;FindHandle:&nbsp;HInternet;&nbsp;&nbsp;<br>
begin&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;FindHandle&nbsp;:=&nbsp;FtpFindFirstFile(FFtphandle,&nbsp;'*.*',&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FindData,&nbsp;0,&nbsp;0);&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;if&nbsp;FindHandle&nbsp;=&nbsp;nil&nbsp;then&nbsp;begin&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;nil;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;FCurFiles.Clear;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;FCurFiles.Add(GetFindDataStr(FindData));&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;while&nbsp;InternetFindnextFile(FindHandle,&nbsp;@FindData)&nbsp;do&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCurFiles.Add(GetFindDataStr(FindData));&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;InternetCloseHandle(Findhandle);&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;GetCurrentDirectory;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;FCurFiles;&nbsp;&nbsp;<br>
end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里需要注意的关键函数是&nbsp;ftpFindFirstFile,&nbsp;InternetFindNextFile&nbsp;&amp;&nbsp;&nbsp;&nbsp;InternetCloseHandle&nbsp;。您可以像调用&nbsp;Delphi&nbsp;函数&nbsp;FindFirst、FindNext&nbsp;&amp;&nbsp;FinClose&nbsp;&nbsp;&nbsp;一样调用这些函数。特别的是,您使用函数ftpFindFirstFile&nbsp;来取得这个路径下的第一&nbsp;&nbsp;个函数。您可以不断地调用&nbsp;&nbsp;&nbsp;InternetFindNextFile&nbsp;,直到函数返回&quot;False&quot;为止。当这个进程结束时,调用&nbsp;&nbsp;&nbsp;InternetCloseHandle&nbsp;来通知操作系统回收与这个进程相关的内存。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
I'm&nbsp;not&nbsp;going&nbsp;to&nbsp;explain&nbsp;this&nbsp;process&nbsp;further&nbsp;in&nbsp;this&nbsp;newsletter.&nbsp;<br>
If&nbsp;you&nbsp;want&nbsp;&nbsp;&nbsp;more&nbsp;information,&nbsp;you&nbsp;might&nbsp;look&nbsp;up&nbsp;FindFirst&nbsp;<br>
in&nbsp;the&nbsp;Delphi&nbsp;help.&nbsp;One&nbsp;final&nbsp;&nbsp;&nbsp;note:&nbsp;Unlike&nbsp;the&nbsp;functions&nbsp;<br>
mentioned&nbsp;in&nbsp;the&nbsp;previous&nbsp;paragraph,TWin32FindData&nbsp;is<br>
&nbsp;not&nbsp;defined&nbsp;in&nbsp;&nbsp;&nbsp;WININET.PAS,&nbsp;but&nbsp;instead&nbsp;can&nbsp;be&nbsp;found<br>
&nbsp;in&nbsp;the&nbsp;WIN32&nbsp;help&nbsp;file&nbsp;that&nbsp;ships&nbsp;with&nbsp;&nbsp;&nbsp;Delphi.&nbsp;It&nbsp;is&nbsp;declared<br>
&nbsp;in&nbsp;the&nbsp;WINDOWS.PAS&nbsp;file&nbsp;that&nbsp;ships&nbsp;with&nbsp;Delphi.&nbsp;&nbsp;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我不准备在这里进一步解析这个进程。如果您想要更多的信息,您可以在&nbsp;Delphi&nbsp;&nbsp;&nbsp;帮助中查找&nbsp;FindFirst&nbsp;。最后提醒一句:并不向前文提及的函数,TWin32FindData&nbsp;并不&nbsp;&nbsp;是在&nbsp;&nbsp;WININET.PAS&nbsp;中定义的,&nbsp;但可以在随&nbsp;Delphi&nbsp;分发的&nbsp;WIN32&nbsp;帮助文件中找到它。&nbsp;&nbsp;它在随&nbsp;Delphi&nbsp;&nbsp;&nbsp;分发的&nbsp;WINDOWS.PAS&nbsp;文件中被定义。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
接受一个文件&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
您可以使用&nbsp;WININET.PAS&nbsp;文件中的&nbsp;ftpGetFile&nbsp;函数来从FTP取回一个文件:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;FtpGetFile(&nbsp;&nbsp;<br>
&nbsp;&nbsp;hFtpSession:&nbsp;HINTERNET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Returned&nbsp;by&nbsp;InternetConnect&nbsp;&nbsp;<br>
&nbsp;&nbsp;lpszRemoteFile:&nbsp;PChar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;File&nbsp;to&nbsp;get&nbsp;&nbsp;<br>
&nbsp;&nbsp;lpszNewFile:&nbsp;PChar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Where&nbsp;to&nbsp;put&nbsp;it&nbsp;on&nbsp;your&nbsp;PC&nbsp;&nbsp;<br>
&nbsp;&nbsp;fFailIfExists:&nbsp;BOOL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Overwrite&nbsp;existing&nbsp;files?&nbsp;&nbsp;<br>
&nbsp;&nbsp;dwFlagsAndAttributes:&nbsp;DWORD;&nbsp;&nbsp;&nbsp;//&nbsp;File&nbsp;attribute-See&nbsp;CreateFile.&nbsp;&nbsp;<br>
&nbsp;&nbsp;dwFlags:&nbsp;DWORD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Binary&nbsp;or&nbsp;ASCII&nbsp;transfer&nbsp;&nbsp;<br>
&nbsp;&nbsp;dwContext:&nbsp;DWORD):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Usually&nbsp;zero&nbsp;&nbsp;<br>
BOOL&nbsp;stdcall;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;True&nbsp;on&nbsp;success&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
下面是一个如何使用该函数的例子:&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
function&nbsp;TMyFtp.GetFile(FTPFile,&nbsp;NewFile:&nbsp;string):&nbsp;Boolean;&nbsp;&nbsp;<br>
begin&nbsp;&nbsp;<br>
&nbsp;&nbsp;Result&nbsp;:=&nbsp;FtpGetFile(FFTPHandle,&nbsp;PChar(FTPFile),&nbsp;PChar(NewFile),&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;False,&nbsp;File_Attribute_Normal,&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ftp_Transfer_Type_Binary,&nbsp;0);&nbsp;&nbsp;<br>
end;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;如果要知道&nbsp;dwFlagsAndAttributes&nbsp;参数中的变量是怎样传递的,请查阅随&nbsp;Delphi&nbsp;&nbsp;&nbsp;附送的&nbsp;WIN32&nbsp;帮助文件。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
典型控制&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;下面的&nbsp;Delphi&nbsp;控制给了你一个通过&nbsp;WININET&nbsp;FTP&nbsp;部分建立可视工具的起点。只是因&nbsp;&nbsp;为,这个控制可以让您是用&nbsp;Object&nbsp;Inspector&nbsp;来定义远程服务器(RemoteServer)、用户&nbsp;&nbsp;身份(UserID)和密码(Password)。&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>
unit&nbsp;Ftp1;&nbsp;&nbsp;<br>
&nbsp;&nbsp;<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -