Probleme Mit Wininetapi
-
Hallo erstmal, ich habe folgendes Problem und zwar lese ich einen Ordner per FTPFindFirstFile und FTPFindNextFile aus. Die Dateinamen bekomme ich auch ausgegeben soweit funktioniert es. Nun möchte ich in einer while Schleife die dateien öffnen und deren inhalt lokal speichern, aber die Dateien lassen sich nicht öffnen. Nur die erste wird erfolgreich geöffnet. Was ist an dem Code falsch?
Vielen Dank für die Hilfe im vorraus.
bool ::sync::ReadAll(HWND hwnd){ status s; init in; s.iArt=1; s.SetStatus("Verbinden mit...",hwnd); /////////////////////////////////////////////////////////////////////////////////////////////// HINTERNET hInetOpen, hInetConnect; FILE* datei; char szUserPfad[255], szMemberPfad[255], szNotesPfad[255], directory_ftp[]="intern/users", szBuff[255]; std::string pfad, status; HINTERNET file, notes; char buff[4096] = ""; DWORD dwBytesRead; GetPrivateProfileString(szBenutzer,"ftp","NULL",host,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"benutzer","NULL",user,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"passw","NULL",pass,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"users","NULL",szUserPfad,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"notes","NULL",szNotesPfad,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"member","NULL",szMemberPfad,255,in.Pfad()); hInetOpen = InternetOpen("FTP",INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hInetConnect = InternetConnect(hInetOpen, host, INTERNET_DEFAULT_FTP_PORT, user, pass, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); if((hInetOpen || hInetConnect) == 0){ s.SetStatus("Keine Verbindung",hwnd); }else{ s.SetStatus(host,hwnd); if(FtpSetCurrentDirectory(hInetConnect, directory_ftp)){ status = "In Ordner "; status += directory_ftp; status += " gewechselt"; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); } ///Hier User updaten WIN32_FIND_DATA wfd; HINTERNET hFile = FtpFindFirstFile(hInetConnect, TEXT("*"), &wfd, 0, (DWORD_PTR)this); //hFile = hTemp; if (hFile == NULL) { s.SetStatus("Fehler Dateien nicht geöffnet",hwnd); return 0; } BOOL bResult = TRUE; while (bResult) { if(strcmp(wfd.cFileName, "..")){ sprintf(szBuff, "Datei: %s wird behandelt.", wfd.cFileName); status = szBuff; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); file = FtpOpenFile(hInetConnect, // Handle to the ftp session wfd.cFileName, // filename (auch find first file) GENERIC_READ, // dwAccess FTP_TRANSFER_TYPE_BINARY, // dwFlags 0); // This is the context used for callbacks. if(file){ s.SetStatus("Datei geöffnet",hwnd); // Read the response if(InternetReadFile(file, buff, 4095, &dwBytesRead)) s.SetStatus("Datei gelesen",hwnd); pfad = szUserPfad; pfad += wfd.cFileName; datei = fopen(pfad.c_str(),"w+"); if(datei==NULL) s.SetStatus("Fehler beim Schreiben",hwnd); else{ fprintf(datei,"%s", buff); fclose(datei); }} } bResult = InternetFindNextFile(hFile, &wfd); } InternetCloseHandle(hFile); ///Hier User updaten sprintf(directory_ftp,"../notes"); if(FtpSetCurrentDirectory(hInetConnect, directory_ftp)){ status = "In Ordner "; status += directory_ftp; status += " gewechselt"; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); } ///Hier Notizen updaten ///Hier Notizen updaten sprintf(directory_ftp,"../member"); if(FtpSetCurrentDirectory(hInetConnect, directory_ftp)){ status = "In Ordner "; status += directory_ftp; status += " gewechselt"; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); } ///Hier Beiträge updaten ///Hier Beiträge updaten s.SetStatus("Erfolgreich aktualisiert",hwnd); } InternetCloseHandle(hInetOpen); InternetCloseHandle(hInetConnect); s.iArt=0; s.SetStatus("Verbindungen Getrennt!",hwnd); MessageBox(NULL, "Die Vereinsmitglieder wurden erfolgreich vom Server geladen!","Geladen",MB_OK); }(Erstmal soll er den ersten Ordner syncronisieren, in die anderen wechselt er nur schonmal.)
Danke für eure Hilfe im Vorraus
Sönke
PS: SteStatus gibt den Status aus.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Kann mir hier keiner helfen?
-
Du solltest vermutlich die Fehlermeldung posten...
Also, bitte Rückgabewerte abfragen und bei Fehler entsprechend ausgeben.
-
so nun hab ich den fehlercode ausgelesen (ich hoffe, dass ichs richtig gemacht habe) er wird jezt in meinem status angezeigt. es ist der fehlercode 12110
mit dem kann ich aber auch nichts anfangen.hier nochmal der code mit fehlerausgabe:
bool ::sync::ReadAll(HWND hwnd){ status s; init in; s.iArt=1; s.SetStatus("Verbinden mit...",hwnd); /////////////////////////////////////////////////////////////////////////////////////////////// HINTERNET hInetOpen, hInetConnect; FILE* datei; char szUserPfad[255], szMemberPfad[255], szNotesPfad[255], directory_ftp[]="intern/users", szBuff[255]; std::string pfad, status, statuss; HINTERNET file, notes; char buff[4096] = ""; DWORD dwBytesRead; GetPrivateProfileString(szBenutzer,"ftp","NULL",host,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"benutzer","NULL",user,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"passw","NULL",pass,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"users","NULL",szUserPfad,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"notes","NULL",szNotesPfad,255,in.Pfad()); GetPrivateProfileString(szBenutzer,"member","NULL",szMemberPfad,255,in.Pfad()); hInetOpen = InternetOpen("FTP",INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hInetConnect = InternetConnect(hInetOpen, host, INTERNET_DEFAULT_FTP_PORT, user, pass, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); if((hInetOpen || hInetConnect) == 0){ s.SetStatus("Keine Verbindung",hwnd); }else{ s.SetStatus(host,hwnd); if(FtpSetCurrentDirectory(hInetConnect, directory_ftp)){ status = "In Ordner "; status += directory_ftp; status += " gewechselt"; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); } ///Hier User updaten WIN32_FIND_DATA wfd; HINTERNET hFile = FtpFindFirstFile(hInetConnect, TEXT("*"), &wfd, 0, (DWORD_PTR)this); //hFile = hTemp; if (hFile == NULL) { s.SetStatus("Fehler Dateien nicht geöffnet",hwnd); return 0; } BOOL bResult = TRUE; while (bResult) { if(strcmp(wfd.cFileName, "..")){ sprintf(szBuff, "Datei: %s wird behandelt.", wfd.cFileName); status = szBuff; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); file = FtpOpenFile(hInetConnect, // Handle to the ftp session wfd.cFileName, // filename (aud find first file) GENERIC_READ, // dwAccess FTP_TRANSFER_TYPE_BINARY, // dwFlags 0); // This is the context used for callbacks. if(file){ s.SetStatus("Datei geöffnet",hwnd); // Read the response if(InternetReadFile(file, buff, 4095, &dwBytesRead)) s.SetStatus("Datei gelesen",hwnd); pfad = szUserPfad; pfad += wfd.cFileName; datei = fopen(pfad.c_str(),"w+"); if(datei==NULL) s.SetStatus("Fehler beim Schreiben",hwnd); else{ fprintf(datei,"%s", buff); fclose(datei); } }else{ /////////////////////////////////// ////////////////////////////// char ab[500]; sprintf(ab,"%d",GetLastError()); if(GetLastError() == ERROR_FILE_NOT_FOUND) sprintf(ab,"Datei nicht gefunden"); statuss = "Fehler: "; statuss += ab; statuss += " (Datei öffnen)"; s.SetStatus(const_cast<char*>(statuss.c_str()),hwnd); } } bResult = InternetFindNextFile(hFile, &wfd); } InternetCloseHandle(hFile); ///Hier User updaten sprintf(directory_ftp,"../notes"); if(FtpSetCurrentDirectory(hInetConnect, directory_ftp)){ status = "In Ordner "; status += directory_ftp; status += " gewechselt"; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); } ///Hier Notizen updaten ///Hier Notizen updaten sprintf(directory_ftp,"../member"); if(FtpSetCurrentDirectory(hInetConnect, directory_ftp)){ status = "In Ordner "; status += directory_ftp; status += " gewechselt"; s.SetStatus(const_cast<char*>(status.c_str()),hwnd); } ///Hier Beiträge updaten ///Hier Beiträge updaten s.SetStatus("Erfolgreich aktualisiert",hwnd); } InternetCloseHandle(hInetOpen); InternetCloseHandle(hInetConnect); s.iArt=0; s.SetStatus("Verbindungen Getrennt!",hwnd); MessageBox(NULL, "Die Vereinsmitglieder wurden erfolgreich vom Server geladen!","Geladen",MB_OK); }