Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: FTP FindFirstFile
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003
FTP FindFirstFile

Piszę sobie teraz programik skanujący całego ftp'a. Ma on za zadanie przeszukać wszystkie foldery i znaleźć w nich wszystkie pliki. Napisałem funkcję która to robi (tzn powinna robić - teoretycznie) problem w tym że gdy ma ona przeszukać jakikolwiek katalog (oprócz root) api FtpFindFirstFile zgłasza wartość false - tak jak by w folderach nie było żadnych plików ani katalogów. Wie ktoś może dlaczego? (oczywiście wcześniej normalnie się łącze z serwerem również zapomocą api (tak jak jest w przykładzie w ApiGuide) Bardzo prosze o pomoc.

Private Sub scanDirectory(ByVal oDir As String)

Dim pData As WIN32_FIND_DATA, hFind As Long, lRet As Long
Dim tAblica() As String
ReDim tAblica(0)
If oDir = "/." Or oDir = "/.." Then Exit Sub
    If oDir <> sOrgPath Then
        FtpSetCurrentDirectory hConnection, sOrgPath
        tbl = Split(oDir, "/" )
        For i = 1 To UBound(tbl)
            testd = FtpSetCurrentDirectory(hConnection, tbl(i))
        Next i
    End If
   
    pData.cFileName = String(MAX_PATH, 0)

    hFind = FtpFindFirstFile(hConnection, "*.*", pData, 0, 0)
    If hFind = 0 Then Exit Sub


    If pData.dwFileAttributes = 16 Then
        oNazwa = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
        If oNazwa <> "." And oNazwa <> ".." Then
            ReDim Preserve tAblica(UBound(tAblica) + 1)
            tAblica(UBound(tAblica) - 1) = oNazwa
            kAtalogi = kAtalogi + 1
        End If
    Else
        oNazwa = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
        oSize = oSize + pData.nFileSizeLow
        Me.Print oDir & "/" & oNazwa & " = " & pData.nFileSizeLow
        pLiki = pLiki + 1
    End If
    Do
       
        pData.cFileName = String(MAX_PATH, 0)
       
        lRet = InternetFindNextFile(hFind, pData)
       
        If lRet = 0 Then Exit Do
       
        If pData.dwFileAttributes = 16 Then
            oNazwa = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
            If oNazwa <> "." And oNazwa <> ".." Then
                ReDim Preserve tAblica(UBound(tAblica) + 1)
                tAblica(UBound(tAblica) - 1) = oNazwa
                kAtalogi = kAtalogi + 1
            End If
        Else
            oNazwa = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
            oSize = oSize + pData.nFileSizeLow
            Me.Print oDir & "/" & oNazwa & " = " & pData.nFileSizeLow
            pLiki = pLiki + 1
        End If
    Loop
    For i = 0 To UBound(tAblica) - 1
        If oDir = sOrgPath Then
            scanDirectory oDir & tAblica(i)
            oKatalog = oDir & tAblica(i)
        Else
            scanDirectory oDir & "/" & tAblica(i)
            oKatalog = oDir & "/" & tAblica(i)
        End If
    Next i
End Sub


Oczywiście cała ta funkcja nie jest jeszce skończona wiec nie zwracajcie uwagi na inne rzeczy. Problem jest tylko z tą Api. Dzięx


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

05-02-2004 01:33
Pokaż profil m-a-x  Wyślij email do m-a-x   
Jelcyn
Admin forum




Typ: admin
Postów: 895
Zarejestrowany: Apr 2002

FTP to dla mnie czarna magia ;-)

Ale ja bym to zrobił inaczej: wydał komendę ls (w unixach jest to odpowiednik dosowego DIRa) i zwrócony wynik przeanalizował. Może nie jest to odpowiedź na twoje pytanie, tylko jakby alternatywna metoda rozwiązania Twojego problemu.


_____________________________________________
Jelcyn
vb4all(małpka)canpol.pl
http://www.coderscity.pl/no-vb4all * http://www.jelcyn.com

05-02-2004 10:51
Pokaż profil Jelcyn  Wyślij email do Jelcyn   Odwiedź stronę Jelcyn       270849979    6237704
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Tzn wiesz... bez problemu poradziłbym sobie z tym problemem gdybym miał łączyć się z serwerem za pomocą np winsock a co za tym idzie protokołem ftp. Ale szczerze mówiąc to mi sie nie chce Chciałbym to zrobić za pomocą Api. Mimo to dzięki za podpowiedź


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

05-02-2004 13:34
Pokaż profil m-a-x  Wyślij email do m-a-x   
Wszystkich odpowiedzi: 2 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1