小弟,这几天正作一个FTP控件,遇到几个问题,请大富翁里的大哥们帮忙!(40分)

  • 主题发起人 主题发起人 FreeYJ
  • 开始时间 开始时间
F

FreeYJ

Unregistered / Unconfirmed
GUEST, unregistred user!
我作的FTP控件,是用WinInet里的几个有关FTP的函数。
现在还有几个函数不明白:
function FtpOpenFile(hConnect: HINTERNET; lpszFileName: PChar;
dwAccess: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;
function FtpCommand(hConnect: HINTERNET; fExpectResponse: BOOL;
dwFlags: DWORD; lpszCommand: PChar; dwContext: DWORD): BOOL; stdcall;
如有人用过这函数的,请详细说明一下如何使用。谢绝罐水。
一个函数20分

 
具体看一下帮助,我记不太起来了。
 
你指的是Delphi的Win32Api帮助吗?好象没找到。
是不是Msdn里的呀。请指教。
有没有范例呀,这样会更好理解?
 
我记得在Command下按f1好像就有了。
 
这个是没有帮助的,看看有没有人对这个有研究吧
不过我觉得ICS的FtpClient的控件已经很强大了 :)
 
FtpClient把一个EXE文件,传上去,后再下载下来,EXE文件就不能用了,
看了一下,文件里多了很多,#0A字符。不知你们用时会不会发现。
 
耶!真没想到也有人和我一样有不可思异的事情发生了,
我也曾使用ftp控件,在使用断点续传时,我文件的字节数变多,
比如:原先已上传80kb后,使用断点续传,最后的字节数竟多了80kb出来,
我查过了,只是在文件的最后多了,许多空行。可这个问题到现在我也还是没能解决,
祝你好运!
 
我想是你把模式设置错了吧,应该设成二进制模式,而不是ASCII模式,你的问题明显是
FtpClient把EXE文件当做文本文件了,它发现文件中有#0D字符就会在后面加上#0A,#0D#0A
是一个回车,因为在文本文件中不可能有单独的一个#0D字符存在,所以它就自做主张了。
对了,其实也不是它自作主张,如果模式设置错了,任何的控件都是这样的。
 
我看了没有设错,是二进模式的。可还是一样,都是多了#0D#0A两个字符。
 
你用ICS自带的DEMO程序-Ftptst试试看,它就不会有任何问题。
 
我试过了,例子的也一样。
 
不会吧,我在我这里试的不会有问题啊
 
可能是我的控件出现问题呀。
 
这些函数的技术文档在Microsoft的msdn里面
先发个函数的文档给你,赚一点分数,呵呵
Initiates access to a remote file on an FTP server for reading or writing.

Syntax

HINTERNET FtpOpenFile(
IN HINTERNET hConnect,
IN LPCTSTR lpszFileName,
IN DWORD dwAccess,
IN DWORD dwFlags,
IN DWORD_PTR dwContext
);

The actual syntax of this function varies between its ANSI and Unicode
implementations.
For more information, see Win32 Internet Functions Syntax.

Parameters

hConnect :
Valid HINTERNET handle to an FTP session.
lpszFileName :
Address of a null-terminated string that contains the name of the file
to access on the remote system.
dwAccess :
Unsigned long integer value that determines how the file will be
accessed. This can be GENERIC_READ or GENERIC_WRITE, but not both.
dwFlags :
Unsigned long integer value that contains the conditions under
which the transfers occur. The application should select one
transfer type and any of the flags that indicate how the caching
of the file will be controlled. The transfer type can be one of
the following values:

1):FTP_TRANSFER_TYPE_ASCII
Transfers the file using FTP's ASCII (Type A) transfer method.
Control and formatting information is converted to local
equivalents.
2):FTP_TRANSFER_TYPE_BINARY
Transfers the file using FTP's Image (Type I) transfer method.
The file is transferred exactly as it exists. This is the
default transfer method.
3):FTP_TRANSFER_TYPE_UNKNOWN
Defaults to FTP_TRANSFER_TYPE_BINARY.
4):INTERNET_FLAG_TRANSFER_ASCII
Transfers the file as ASCII.
5):INTERNET_FLAG_TRANSFER_BINARY
Transfers the file as binary.

The following values are used to control the caching of the file. The application
can use one or more of these.

1):INTERNET_FLAG_HYPERLINK
2):INTERNET_FLAG_NEED_FILE
3):INTERNET_FLAG_RELOAD
4):INTERNET_FLAG_RESYNCHRONIZE

dwContext :
Address of an unsigned long integer value that contains the
application-defined value that associates this search with
any application data. This is only used if the application
has already called InternetSetStatusCallback to set up a
status callback function.

Return Value

Returns a handle if successful, or NULL otherwise. To retrieve a specific error
message, call GetLastError.
 
都是English的,不好意思,有问题可以聊聊
 
to myliu:有它的网址吗?
 
我发现用Delphi里面的Ftp控件不能传送大文件,不知你们有没有遇到,搞的我要在中
间层上写函数进行“文件=>字符串流”,“字符串流=>文件”这样一个麻烦的转换过
程。有没有其它的第三方FTP控件能解决这个问题。
 
你到yahoo或其他搜索引擎上搜索下面这个关键字:
Delphi与Internet
一定能找到你要的几个wininet 函数的例子 。
下面先给你看个例子:
FHandle := FtpOpenFile(FFTPHandle, 'sam.txt', GENERIC_READ,
FTP_TRANSFER_TYPE_BINARY, 0);
 
to 热水:你说的大文件是多大?10M算不算?我用NMFtp和ICS的FtpClient都试过10M以上的
传输,没有发现过问题啊。
 
To 教父:
有啊,msdn.microsoft.com在WebWokshop里面
 
后退
顶部