ftpputfile的api上传,为什么不能覆盖上传呢?
时间:2011-10-13
来源:互联网
Option Explicit
Public dwType As Long
Public hOpen As Long
'用InternetOpen()函数建立Internet对话后返回的句柄
Public hConnection As Long
'用InternetConnect()函数建立FTP连接后返回的句柄
Dim ret As Long
Dim start As Long
Public iniFileName As String
Const BufSize = 10240
Dim buf As String * BufSize
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const INFINITE = -1&
'连接Internet服务的常数
Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_SERVICE_GOPHER = 2
Public Const INTERNET_SERVICE_HTTP = 3
'与ftp服务器之间的文件传输采取ascii(文本)方式
Public Const FTP_TRANSFER_TYPE_ASCII = &H1
'与ftp服务器之间的文件传输采取binary(二进制)方式
Public Const FTP_TRANSFER_TYPE_BINARY = &H2
'直接连接Internet
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_FLAG_PASSIVE = &H8000000
'与ftp服务器之间的文件传输采取ascii(文本)方式
'FTP协议服务器的端口号为21
Private Const INTERNET_DEFAULT_FTP_PORT = 21
'上传函数
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'连接服务器
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
'sAgent--要调用internet对话的应用程序名
'lAccessType--请求的访问的类型,包括:
'INTERNET_OPEN_TYPE_PRECONFIG---预配置(缺省)
'INTERNET_OPEN_TYPE_DIRECT--直接指向internet
'INTERNET_OPEN_TYPE_PROXY--通过代理服务器连接
'sProxyName--如果lAccessType被设置为INTERNET_OPEN_TYPE_PROXY,该参数为
'代理服务器的名字
'sProxyBypass--包含一系列代理服务器地址的字符串
'lFlags--会话的选项,可包括下列值:
'INTERNET_FLAG_DONT_CACHE--不对数据进行本地缓冲或通过网关服务器缓冲
'INTERNET_FLAG_ASYNC--当操作完成时,将同INTERNET_STATUS_REQUEST_COMPLETE
'一起进行一个状态回调
'INTERNET_FLAG_OFFLINE--只通过永久缓冲进行下载操作
'改变FTP服务器的当前目录。
Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
(ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
'lpszDirectory--包含要到达的目录名。可以是相对的或绝对的路径。
Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long
'hInternetSession--函数InternetOpen()打开Internet对话返回的值
'sServerName--要连接的服务器的名称或IP
'nServerPort--该连接的Internet端口
'sUsername--登录的用户帐号
'sPassword--登录的口令
'lService--要连接的服务器类型(这里是连接FTP服务器,连接的类型为常数INTERNET_SERVICE_FTP)
'关闭Internet连接
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
'lpszLocalFile--要发送的文件名
'lpszRemoteFile--在FTP服务器上要创建的文件名
'dwFlags--文件的传输方式
'dwContext--要取回的文件的描述表标识符
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
不知道为什么呢,能解决覆盖上传吗?
Public dwType As Long
Public hOpen As Long
'用InternetOpen()函数建立Internet对话后返回的句柄
Public hConnection As Long
'用InternetConnect()函数建立FTP连接后返回的句柄
Dim ret As Long
Dim start As Long
Public iniFileName As String
Const BufSize = 10240
Dim buf As String * BufSize
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const INFINITE = -1&
'连接Internet服务的常数
Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_SERVICE_GOPHER = 2
Public Const INTERNET_SERVICE_HTTP = 3
'与ftp服务器之间的文件传输采取ascii(文本)方式
Public Const FTP_TRANSFER_TYPE_ASCII = &H1
'与ftp服务器之间的文件传输采取binary(二进制)方式
Public Const FTP_TRANSFER_TYPE_BINARY = &H2
'直接连接Internet
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_FLAG_PASSIVE = &H8000000
'与ftp服务器之间的文件传输采取ascii(文本)方式
'FTP协议服务器的端口号为21
Private Const INTERNET_DEFAULT_FTP_PORT = 21
'上传函数
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'连接服务器
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
'sAgent--要调用internet对话的应用程序名
'lAccessType--请求的访问的类型,包括:
'INTERNET_OPEN_TYPE_PRECONFIG---预配置(缺省)
'INTERNET_OPEN_TYPE_DIRECT--直接指向internet
'INTERNET_OPEN_TYPE_PROXY--通过代理服务器连接
'sProxyName--如果lAccessType被设置为INTERNET_OPEN_TYPE_PROXY,该参数为
'代理服务器的名字
'sProxyBypass--包含一系列代理服务器地址的字符串
'lFlags--会话的选项,可包括下列值:
'INTERNET_FLAG_DONT_CACHE--不对数据进行本地缓冲或通过网关服务器缓冲
'INTERNET_FLAG_ASYNC--当操作完成时,将同INTERNET_STATUS_REQUEST_COMPLETE
'一起进行一个状态回调
'INTERNET_FLAG_OFFLINE--只通过永久缓冲进行下载操作
'改变FTP服务器的当前目录。
Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" _
(ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
'lpszDirectory--包含要到达的目录名。可以是相对的或绝对的路径。
Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long
'hInternetSession--函数InternetOpen()打开Internet对话返回的值
'sServerName--要连接的服务器的名称或IP
'nServerPort--该连接的Internet端口
'sUsername--登录的用户帐号
'sPassword--登录的口令
'lService--要连接的服务器类型(这里是连接FTP服务器,连接的类型为常数INTERNET_SERVICE_FTP)
'关闭Internet连接
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _
(ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
'lpszLocalFile--要发送的文件名
'lpszRemoteFile--在FTP服务器上要创建的文件名
'dwFlags--文件的传输方式
'dwContext--要取回的文件的描述表标识符
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
不知道为什么呢,能解决覆盖上传吗?
作者: cjr7365 发布时间: 2011-10-13
我用的是Chilkat FTP,很方便。
作者: patrickkong 发布时间: 2011-10-14
是不是文件权限问题?不允许覆盖?
作者: Veron_04 发布时间: 2011-10-14
在权限足够的前提下,先FtpFindFirstFile判断文件是否存在,如果存在则FtpDeleteFile,最后使用FtpPutFile。
作者: lyserver 发布时间: 2011-10-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28