Hej! Jag hade ett bokmärke på http://www.answers.com/topic/ftp-functions?cat=technology sedan gammalt. Skrev/översatte en artikel i ämnet för några år sedan.Kan du få någon hjälp där ? Tack både Fredrik och Sven-Åke.Skapa mapp på FTP-server
Jag försöker förtvivlat att skapa en mapp på en FTP-server med VB-kod.
Jag har läst allt jag hittar om FTP här på Pellesoft, och tyvärr är många externa länkar i gamla foruminlägg obrukbara, just för att de är gamla.
Jag använder följande kod för att skicka filer till en FTP-server, men jag vill få med själva mappstrukturen, och måste därför kunna skapa mappar!
Följande är en class jag hittat här på Pellesoft. Jag anropar funktionen PutFile för att skicka filer...
'Lägg till en Class Module och döp den till FTPPutFile
Option Explicit
Private Const FTP_TRANSFER_TYPE_UNKNOWN = &H0
Private Const FTP_TRANSFER_TYPE_BINARY = &H2
Private Const FTP_TRANSFER_TYPE_ASCII = &H1
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_SERVICE_FTP = 1
Private Const INTERNET_FLAG_PASSIVE = &H8000000
Private 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
Private 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
Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private 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
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Long
Private lngInternetSession As Long
Private lngFTPSession As Long
Public Enum FileTransferType
ftpUnknown = FTP_TRANSFER_TYPE_UNKNOWN
ftpAscii = FTP_TRANSFER_TYPE_ASCII
ftpBinary = FTP_TRANSFER_TYPE_BINARY
End Enum
Public Enum ConnectionModes
Active = 0
Passive = INTERNET_FLAG_PASSIVE
End Enum
'Skapa en kontakt med servern, returnerar True ifall det gick bra
Public Function ConnectToServer(ByVal Server As String, Optional ByVal Port As Long = 21, Optional ByVal ConnectionMode As ConnectionModes = Active, Optional ByVal Username As String, Optional ByVal Password As String) As Boolean
Dim blnRet As Boolean
CloseConnection
If Username = "" Then Username = "Anonymous@Anonymous.com"
lngInternetSession = InternetOpen("FTPPUT", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
If lngInternetSession <> 0 Then
lngFTPSession = InternetConnect(lngInternetSession, Server, Port, Username, Password, INTERNET_SERVICE_FTP, ConnectionMode, 0)
End If
If lngFTPSession <> 0 Then blnRet = True
ConnectToServer = blnRet
End Function
'Skicka upp en fil på servern med valfri transfertype, Ifall annan katalog än din hemmakatalog specifiera den
Public Function PutFile(ByVal LocalFilePath As String, ByVal RemoteFilename As String, Optional ByVal TransferType As FileTransferType = ftpBinary, Optional ByVal WorkingDir As String) As Boolean
Dim retFile As Long, blnRet As Boolean
If WorkingDir <> "" Then FtpSetCurrentDirectory lngFTPSession, WorkingDir
retFile = FTPPutFile(lngFTPSession, LocalFilePath, RemoteFilename, TransferType, 0)
If retFile <> 0 Then blnRet = True
PutFile = blnRet
End Function
'Stäng kontakten till servern
Public Sub CloseConnection()
If lngFTPSession <> 0 Then InternetCloseHandle lngFTPSession
If lngInternetSession <> 0 Then InternetCloseHandle lngInternetSession
End Sub
Private Sub Class_Terminate()
CloseConnection
End Sub
När jag anropar PutFile så kan jag inte sätta "WorkingDir" till änskad mapp om den mappen inte existerar. Jag vill alltså skapa en ny mapp på FTP-servern genom VB-kod. Hur?
Sv: Skapa mapp på FTP-server
Där kan man bland annat läsa följande:
<code>
Private Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
FtpCreateDirectory hConnection, "testing"
</code>
Har inte testat själv, men det kanske kan funka..Sv:Skapa mapp på FTP-server
http://www.pellesoft.se/area/articles/article.aspx?artid=370Sv:Skapa mapp på FTP-server
Med hjälp av Fredriks tips så löste jag det hela.
Intressant artikel du har översatt Sven-Åke!
/David