FindFirstFile的参数用法 ( 积分: 50 )

  • 主题发起人 主题发起人 simonlyr
  • 开始时间 开始时间
S

simonlyr

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用以下API函数时:<br>HANDLE FindFirstFile(<br> &nbsp; &nbsp;LPCTSTR lpFileName, // pointer to name of file to search for &nbsp;<br> &nbsp; &nbsp;LPWIN32_FIND_DATA lpFindFileData // pointer to returned information <br> &nbsp; );<br>发现:lpFileName只能是本地路径下才能发现文件,但我在以下的代码中:<br>Source_filehandle := FindFirstFile(PChar('http://www.xxx.com.xn/xxxx/xxx/xx/'+ '/'+ '*.*'), Source_FileData);<br>if Source_filehandle &lt;&gt; INVALID_HANDLE_VALUE then //如果文件查找有效<br>begin<br><br>end<br>else<br>begin<br> &nbsp; //始终是无效的??<br>end;<br>但以上远程服务器上的目录里是有文件的呀!怎么解决??急!
 
我在使用以下API函数时:<br>HANDLE FindFirstFile(<br> &nbsp; &nbsp;LPCTSTR lpFileName, // pointer to name of file to search for &nbsp;<br> &nbsp; &nbsp;LPWIN32_FIND_DATA lpFindFileData // pointer to returned information <br> &nbsp; );<br>发现:lpFileName只能是本地路径下才能发现文件,但我在以下的代码中:<br>Source_filehandle := FindFirstFile(PChar('http://www.xxx.com.xn/xxxx/xxx/xx/'+ '/'+ '*.*'), Source_FileData);<br>if Source_filehandle &lt;&gt; INVALID_HANDLE_VALUE then //如果文件查找有效<br>begin<br><br>end<br>else<br>begin<br> &nbsp; //始终是无效的??<br>end;<br>但以上远程服务器上的目录里是有文件的呀!怎么解决??急!
 
FindFirstFile好像不是找远程目录的函数。他做不到你的要求。同时,你的调用方法也有问题,你给的参数不对。<br>var<br> &nbsp;FileData: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WIN32_FIND_DATA;<br> &nbsp;hSearch: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; THandle;<br>begin<br> &nbsp;hSearch := FindFirstFile('C:/abc/*.*', FileData);<br> &nbsp;。。。。。。<br>end;
 
如果用在局域网共享目录下,FindFirstFile还能用,用上带有协议的网络地址(如你的‘http://...’)那是绝对不行的!别指望能这样做。
 
to zqw0117:<br>那在远程服务器下载指定路径下的文件到本地,用什么函数实现好呢?谢谢!
 
用ftp下了它,不就完了吗
 
如果远程服务器上用的IIS,那你就用网络控件获取列表(如果IIS开放了列表的话),然后分析返回的html语法,得出文件并分别下载。否则就用ftp服务把。
 
我是用在系统中实时检测是否有最新版本的程序,我想通过程序实现的办法读取来实现。不用FTP不可以吗?
 
可以啊,那你在服务器上固定传一个ini文件啊,或者任何扩展名的,里面再保存服务器上更新文件列表和文件版本,首先,你的程序固定从一个地址(如:http://mydomain.com/update.ini)下载这个ini文件,然后分析后,再一个一个从你的网络上下载更新文件啊!没你想的那么复杂。
 
顺便说一句,所有的自动更新程序基本上都是这样做的。
 
象瑞星啊什么的,他们还是下载xml文件来确定更新版本以及有哪些文件要下载更新数据呢(里面还有MD5校验值)
 
to zqw0117:<br> &nbsp; 我有类似update.ini的版本下载文件,但该ini文件必须包含所有需要更新的文件名吗?万一我有成千上万的需要更新的文件,那么都必须在ini文件里一一说明吗?我的ini文件里只有版本的控制,而没有所有文件的配置。
 
晕,你会有成千上万的文件要更新吗?难道是Windows的Update Pack?<br>如果是这种情况估计都得在ini文件中说明,而且,光有文件名还不行,还要有文件大小,文件CRC和MD5校验值(因为网络传输是不能假定完全正确的)。如果这个ini文件很大,那也可以用zip或者rar压缩一下,对于纯文本的压缩,zip和rar很在行的,能压缩到只有原来体积的5-10%左右,这样你下载后解压分析也行。就算你不采取这种方法,让IIS来列举目录,但是IIS列举的信息没那么多啊(比如,没有CRC或者MD5校验把?)那样还不如用ini文件,或者xml文件呢。
 
to zqw0117:<br>我已经可以用DownloadNewSoftWare(Source_strFileName,Dest_strFileName )来实现远程文件的下载了,您可否告诉我Source_strFileName在远程服务器上怎么能一一得到指定目录下的文件吧!
 
晕,我已经讲的这么明确了,难道。。。。。。<br>赚你15分看来还真不容易啊.....<br>var<br> &nbsp;IniFile: string;<br>begin<br> &nbsp;IniFile := 'c:/update.ini';<br> &nbsp;DownloadNewSoftWare('http://www.mydomain.com/update.ini', IniFile);<br> &nbsp;//得到ini文件<br> &nbsp;//打开他<br> &nbsp;with TIniFile.Create(IniFile) do<br> &nbsp;begin<br> &nbsp; &nbsp;///读每个字段每个条目,例如,file条目<br> &nbsp; &nbsp;for I := 0 to ReadInteger('files','fileMaxCount', 0) do<br> &nbsp; &nbsp; &nbsp; &nbsp;AFileList.Add(ReadString('files', 'file' + IntToStr(i), ''));<br> &nbsp; &nbsp;Free;<br> &nbsp;end;<br>end;<br><br>现在AFileList里面就是所有要下载的文件。<br>那么这个update.ini怎么做呢,很简单<br>[file]<br>fileMaxCount=3<br>file0=http://www.mydomain.com/abc.dll<br>file1=http://www.mydomain.com/abcd.dll<br>file2=http://www.mydomain.com/main.exe<br>就这么简单。如果要复杂的,自己想办法写CRC或者MD5校验值
 
补充一下,AFileList里面都保存了所有文件,循环读取每个值,然后分别用你的download下载就可以了。我已经说的够详细了。
 
to zqw0117:<br> &nbsp; 其实我是想把一个指定目录里加密后的所有文件下载到本地,所以文件可能会很多,我觉得都写在ini里很烦琐。您只要告诉我在远程指定目录里怎么取出一一的文件名即可!<br>有知道的朋友都来聊聊,谢谢!
 
只能说,我很无奈。。。。说这么多,你竟然思路还没有打开!不要想列举什么目录,你还不如把文件打包成zip直接传上去供下载来得方便!!!不回答了,走人。
 
楼主。。。。无语<br><br>你的http看到的东西,和普通的C:/XXXX/XXX/x.x或者//xxx.xxx.xxx.xxx/xxxx/xxx这个格式是不一样的<br><br>你用http得到的是什么,一个网页,或者是个XML?<br>估计你是打开了目录浏览吧,那你看到的应该是个网页,那你就要自己分析这个网页内容获得文件列表喽~
 
to zqw0117:<br> &nbsp;我早就知道你的意思了,我之前也是这样考虑的。我只是想有更加简单的办法,看来就用这个办法实现了。
 
后退
顶部