Toon posts:

[c++]Connecten naar een FTP met WinInet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben nu bezig met een kleine applicatie die mbv WinInet verbinding maakt met een FTP-server. Nu heb ik een eigen ftp draaien, dus ik zie of hij wel of niet connect.Het connecten gaat op zich goed, maar dan wil ik een lijst maken met de mappen en bestanden. Daarvoor gebruik ik de functie FtpFindFirstFile(); eerst een stukje code:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    if((findFile =  FtpFindFirstFile(
                                     handleInternet,
                                     NULL,
                                     win32_find_data,
                                     INTERNET_FLAG_NO_CACHE_WRITE,
                                     NULL)) != NULL)

                                     cout<<"FtpFindFirstFile() succed\n";
    if(InternetFindNextFile(
                            findFile,
                            win32_find_data))
                            cout<<"InternetFindNextFile() succeed"<<endl;
    else
        cout<<GetLastError()<<endl;


    if(FtpOpenFile (
                    handleInternet, 
                    win32_find_data->cFileName,
                    GENERIC_READ,
                    FTP_TRANSFER_TYPE_BINARY,
                    NULL) != NULL)

                    cout<<"FtpOpenFile() succeed\n";
    else
    {
        cout<<GetLastError()<<endl;
    }

    


Als uitvoer krijg ik:
code:
1
2
3
4
5
6
InternetOpen() succeed
InternetConnect() succed
FtpFindFirstFile() succed
87
87
Disconnected


Error code 27, volgens msdn staat dat voor een incorecte parameter.
http://msdn.microsoft.com...m_error_codes__0-499_.asp

Volgens mij gaat het mis bij de 2de arg van FtpFindFirstFile(), msdn zegt:
lpszSearchFile
[in] Pointer to a null-terminated string that specifies a valid directory path or file name for the FTP server's file system. The string can contain wildcards, but no blank spaces are allowed. If the value of lpszSearchFile is NULL or if it is an empty string, the function finds the first file in the current directory on the server.
Ik wil dus een lijst met alle mappen en bestanden in de root, dus ik geef een NULL arg mee. En met InternetFindNextFile() wil ik het volgende bestand vinden, net zo lang tot er nix meer te vinden is. Maar dat wil dus niet echt, iemand enige idee hoe het wel moet :r

Verwijderd

Topicstarter
Ok, dat probleem is nu verholpen, maar nu heb ik een ander probleem. Het eerste item vind ie. Om het volgende te zoeken gebruik ik InternetFindNextFile()
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/************** FtpFindFirsFile()***********************/   

    if((findFile =  FtpFindFirstFile(
                            handleInternet,
                            "*\0",
                            &win32_find_data,
                            INTERNET_FLAG_RESYNCHRONIZE,
                            NULL)))
    {
        cout<<"FtpFindFirstFile() succeed\n";
        if ((win32_find_data.dwFileAttributes & 
             FILE_ATTRIBUTE_DIRECTORY) == 
             FILE_ATTRIBUTE_DIRECTORY )
             
             cout<<win32_find_data.cFileName<<" <DIR>\n";

        else 
             cout<<win32_find_data.cFileName<<endl;
    }
    else
    {
        cout<<GetLastError()<<endl;
    }
    
/************** InternetFindNextFile()***********************/  
    
    Sleep(1000);
    while(InternetFindNextFile(findFile , &win32_find_data))
    {
        
        if ((win32_find_data.dwFileAttributes &  FILE_ATTRIBUTE_DIRECTORY) == 
             FILE_ATTRIBUTE_DIRECTORY )
             
             cout<<win32_find_data.cFileName<<"\t<DIR>\n";

        else 
             cout<<win32_find_data.cFileName<<endl;
    }
    if(!InternetFindNextFile(findFile , &win32_find_data))
    {
        DWORD dw=GetLastError();
        cout<<dw<<endl;    //RETURNS A IO ERROR CODE 997
    }


MSDN zegt dat 997 voor Overlapped I/O operation is in progress staat. Ik heb van alles geprobeerd, maar ik blijf die error houden :( iemand enig idee wat ik fout doe

Verwijderd

Topicstarter
echt helemaal niemand die me kan helpen :'(

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:16

.oisyn

Moderator Devschuur®

Demotivational Speaker

De voorbeeldcode in de MSDN doet het op ongeveer dezelfde manier, dus ik zou niet weten wat er fout zou gaan...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.