FTP Dirlisting mit wininet



  • Hi,

    ich code grade einen FTP Client. Als erstes lege ich eine Internet Session(InternetOpen) an, danach den Connect zu einer FTP Site(InternetConnect).
    Falls alles erfolgreich ist, lasse ich mir die Dirs des aktuellen Verzeichnisses ausgeben. Dies geschieht mit einer Methode der Klasse FTP, in der FtpFindFirstFile und InternetFindNextFile aufgerufen werden. Ich übergebe den Zeiger auf InternetConnect. Das Listing klappt auch super, wenn ich danach aber in ein anderes Dir wechsel und ein aktuelles Dirlisting haben will, bekomme ich die gl. Liste wie vorher. Wie kann ich das Problem lösen, ohne InternetCloseHandle(InternetConnect) auszuführen?

    Vielen Dank für die Hilfe

    Daniel



  • Hi,

    verwendest Du CFileFind::Close ?

    Wenn Du nicht weiter kommst, dann poste mal einwenig Code.

    Gruß TT



  • CFileFind::Close ???
    Ich hab als Lib nur die wininet.h, und der Befehl sollte dann doch nicht gehen, oder?
    Also, hier etwas Code:

    hIntSession = InternetOpen ("Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

    hFtpSession = InternetConnect(hIntSession, FtpSite.getIp(), FtpSite.getPort(),
    FtpSite.getLogin(), FtpSite.getPwd(), INTERNET_SERVICE_FTP, 0, 0);

    FtpSite.listFiles(&hFtpSession);

    So, hier nun die listFile Methode:

    void Site::listFiles(HINTERNET *hFtpSession)
    {
    HINTERNET hFindFile=NULL;
    WIN32_FIND_DATA FindData;

    hFindFile = FtpFindFirstFile(*hFtpSession, "*.*", &FindData, INTERNET_FLAG_RELOAD, 0);
    if (hFindFile)
    {
    if ( (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY )
    FileList.add(FindData.cFileName);
    while(InternetFindNextFile(hFindFile, &FindData))
    if ( (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY )
    FileList.add(FindData.cFileName);

    }
    InternetCloseHandle(hFindFile);
    cout << "[" << getName() << "] " << FileList.getAnzahl() << " file(s) found in " << getCurrentDir() << "/" << endl;
    FileList.showData(getName());

    };

    FileList ist eine Liste, wo halt die Daten reingeschrieben werden.
    So, ich glaube, dass sollten die relevanten Stellen sein. Ich möchte halt jedesmal, wenn ich listFile aufrufe, die Files des aktuellen Dirs gelistst bekommen.
    Vielen Dank für die Hilfe....

    Daniel



  • Hi,

    richtig, das mit dem CFileFind::Close kann natürlich nicht funktionieren. Also ich habe an dem Code nichts auszusetzten und auch keine Lösung. Sorry.

    Vielleicht kennt sich ja ein anderer besser aus und kann Dir helfen.

    Gruß TT



  • hallo,

    schau dir den zweiten parameter von ftpfindfirstfile an.
    du musst den pfad dann mit übergeben zb: "test\*.*"

    aus der msdn

    lpszSearchFile
    Address of 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, it will find the first file in the current directory on the server.

    [ Dieser Beitrag wurde am 24.10.2002 um 17:29 Uhr von miller_m editiert. ]



  • *push*



  • Du musst schon eine konkrete Frage stellen und nicht einfach einen 5 Jahre alten Thread herauskramen - sonst gehe ich davon aus, dass sich nur wieder jemand einen Spaß erlauben wollte...


Anmelden zum Antworten