Minulla on VB5-sovellus, jolla luetaan data palvelimelta Inet-komponentin avulla ftp-siirtona. Siirto on tarpeeton ellei dataa ole päivitetty edellisen siirron jälkeen. Tämä näkyisi tiedoston päiväyksestä mutta kuinka sen saisi luettua. Inetin Execute-käskyssä ei ole päiväyksen lukua, tiedoston koko kyllä selviää mutta se ei yleensä riitä päivityksen selvittämiseen.
Löysin joitain määrittelyjä wininet.dll:stä mutta en selkeää esimerkkiä filun muokkauspäiväyksen lukemisesta. Ilmeisesti sillä onnistuu mutta oisko jollain kokemusta vastaavasta hommelista?
Heippa setä!
tutki josko tosta olis jotain apua...
Private Type AJAT
aikaL As Long
aikaH As Long
End Type
Private Type TIEDOT
attribuutit As Long
luotu As AJAT
avattu As AJAT
muokattu As AJAT
kokoH As Long
kokoL As Long
varattu0 As Long
varattu1 As Long
tiedosto As String * 260
End Type
Private Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
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 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 FtpSetCurrentDirectory Lib _
"wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal _
hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpGetCurrentDirectory Lib _
"wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal _
hFtpSession As Long, ByVal lpszCurrentDirectory As _
String, lpdwCurrentDirectory As Long) As Long
Private Declare Function FtpFindFirstFile Lib "wininet.dll" _
Alias "FtpFindFirstFileA" (ByVal hFtpSession As Long, ByVal _
lpszSearchFile As String, lpFindFileData As TIEDOT, ByVal _
dwFlags As Long, ByVal dwContent As Long) As Long
Private Sub Form_Load()
Dim yhteys As Long, avaa As Long, orgPolku As String
avaa = InternetOpen("jokuStringi", 0, vbNullString, vbNullString, 0)
yhteys = InternetConnect(avaa, "ftp-palvelin", 21, "tunnus", _
"salasana", 1, IIf(0, 0, 0), 0)
orgPolku = String(260, 0)
'FtpGetCurrentDirectory yhteys, orgPolku, Len(orgPolku)
'FtpSetCurrentDirectory yhteys, "hakemisto" '= /hakemisto
FtpSetCurrentDirectory yhteys, orgPolku 'takas juureen
listaaKama yhteys
InternetCloseHandle yhteys
InternetCloseHandle avaa
End
End Sub
Public Sub listaaKama(kamat As Long)
Dim tiedDATA As TIEDOT, kahvaHaku As Long, palaute As Long
tiedDATA.tiedosto = String(260, 0)
kahvaHaku = FtpFindFirstFile(kamat, "database.mdb", tiedDATA, 0, 0)
If kahvaHaku = 0 Then Exit Sub
InternetCloseHandle kahvaHaku
MsgBox tiedDATA.attribuutit & vbCrLf & vbCrLf _
& tiedDATA.luotu.aikaL & vbCrLf _
& tiedDATA.luotu.aikaH & vbCrLf & vbCrLf _
& tiedDATA.avattu.aikaL & vbCrLf _
& tiedDATA.avattu.aikaH & vbCrLf & vbCrLf _
& tiedDATA.muokattu.aikaL & vbCrLf _
& tiedDATA.muokattu.aikaH & vbCrLf & vbCrLf _
& tiedDATA.kokoH & vbCrLf _
& tiedDATA.kokoL & vbCrLf & vbCrLf _
& tiedDATA.varattu0 & vbCrLf _
& tiedDATA.varattu1 & vbCrLf & vbCrLf _
& tiedDATA.tiedosto
End SubKiitos Nea, kokeilempa tuota pikaa. Mahtaakohan olla fiksumpi ratkaisu jättää koko Inet-komponentti (msinet.ocx) pois ja siirtää tiedostot wininet.dll:n avulla.
Tyssäs tuohon muuttujaan yhteys, jonka arvoksi jäi 0 eli ilmeisesti yhteyttä ei muodostunut.
Löysin netistä (http://www.15seconds.com/issue/981203.htm) tähän liittyvän ohjeen ja sain yhteyden syntymään. Kuitenkin kohdassa "kahvaHaku = " ohjelma kaatuu aina.
"database.mdb" tilalla on tiedostonimi, joka on palvelimella juurihakemistossa oleva tekstitiedosto testailua varten.
Lähti workkimaan kun vielä lisäsin tietojen typetykseen yhden osan.
Onko tyypillistä vai palvelimesta riippuva ominaisuus, että tuo aikamäärä on ilmoitettu 64 bitillä 0,1 µs erottelulla, mutta aikamäärä asettuu kuitenkin minuutin resoluutiolla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.