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 Sub
Kiitos 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.