Problem mit der while Schleife
-
Hallo,
Folgendes: Es soll aus der Datei string.txt 2 Dateinamen gelesen werden die anschließend überprüft werden sollen ob Sie auf einem Server vorhanden sind. Sobald die erste Datei überprüft wurde(die True) gibt er bei der weiteren auch True an obwohl die gar nicht existieren kann. Wo liegt der Fehler?
HINTERNET hnet, hhost, hdata; DWORD status = 0; DWORD size = sizeof(DWORD); BOOL result = FALSE; char buffer[80]; hnet = InternetOpen("Inet",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); hhost = InternetConnect(hnet,"www.c-plusplus.net",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0); ifstream file("string.txt"); if (! file.is_open()) { cout << "Error opening file"; } while (!file.eof()) { file.getline(buffer,80); hdata = HttpOpenRequest(hhost,"HEAD",buffer,NULL,NULL,NULL,0,0); if(hdata == NULL) result = FALSE; HttpSendRequest(hdata,NULL,0,0,0); if(HttpQueryInfo(hdata,HTTP_QUERY_STATUS_CODE,&status,&size,0)) if(status == FILE_OK) result = TRUE; if(result == TRUE) cout << "Datei vorhanden!"; else cout << "Datei nicht vorhanden!"; }
-
Setz mal das
BOOL result = FALSE;
an den Anfang der while Schleife, sonst wird nämlich result auf true gesetzt falls eine Datei existiert. Aber danach wird es nie wieder zurückgesetzt, außer bei hdata == NULL.
-
Funktioniert leider nicht, seltsam ist ja auch das wenn ich nur eine Dateinamen zum überprüfen angeben wird das richtige Ergebnis angezeigt, nur bei mehreren Dateinamen/Überprüfungen versagt das ganze.
Hat vieleicht noch einer ein Idee? Bitte...
-
Vielleich solltest es mal so versuchen:
if(status == FILE_OK) { result = TRUE; } else { result = FALSE; }
Müsste aber eigentlich das gleiche bewirken wie KPC schon gesagt hat!
(Hast du BOOL result = FALSE; auch in der while-Schleife, also nicht davor!?!)
Falls es immer noch nicht geht, was genau passiert denn bzw. inwiefern funktioniert es nicht?
-
Hab es versucht was ihr beide mir mir gesagt habt aber es geht leider immer noch nicht.
Also nochmal kurz die Problem Lage:
In der Datei string.txt steht:
forumstart.htm
xyz.htm
forumstart.htmDas Programm soll nun prüfen welche Datei vorhanden ist, er sollte dann normalerweie folgende Ausgabe machen:
Datei gefunden! Datei nicht gefunden! Datei gefunden
Das Programm gibt aber:
Datei gefunden! Datei gefunden! Datei gfeunden!
aus.
Hat vieleicht einer eine ganz andere LÖsung wie ich das bewerkstelligen kann, oder noch einen Vorschlag zur abänderung?
-
glaub zwar nich das das was bringt aber wie währs mal mit {} klammern um die if s ?
-
Leider nicht...
-
Hatt den keiner noch eine Idee, werde noch total verrückt mit dem Problem.
Bitte um Hilfe!
-
Hmm... stell mal die Reihenfolge der Dateinamen um, also zuerst die xyz.htm, wenn die dann als nicht gefunden erkannt wird, dann stimmt deine Überprüfung, aber deine Schleife nicht :). Wär vielleicht'n Anfang, herauszufinden, wo der Fehler überhaupt liegt.
cya
[ Dieser Beitrag wurde am 26.12.2002 um 10:45 Uhr von MagiC Creator editiert. ]
-
Also...
Datei:
xyz.htm
forumstart.htm
forumstart.htmAusgabe:
Datei nicht gefunden! Datei nicht gefunden! Datei gefunden!Das "BOOL result = false;" hab ich jetzt nochmal nach oben getan.
// > bcc32 http_request.cpp -l wininet.lib #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <wininet.h> #include <iostream> #include <fstream.h> #include <string> using namespace std; const DWORD FILE_OK = 3158066; HINTERNET hnet, hhost, hdata; DWORD status = 0; DWORD size = sizeof(DWORD); BOOL result = FALSE; char buffer[80]; int main() { hnet = InternetOpen("Inet",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); hhost = InternetConnect(hnet,"www.c-plusplus.net",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0); ifstream file; file.open("string.dat", ios::in | ios::binary); if (!file.is_open()) cout << "Error opening file"; while (!file.eof()) { file.getline(buffer,80); hdata = HttpOpenRequest(hhost,"HEAD",buffer,NULL,NULL,NULL,0,0); if(hdata == NULL) result = FALSE; HttpSendRequest(hdata,NULL,0,0,0); if(HttpQueryInfo(hdata,HTTP_QUERY_STATUS_CODE,&status,&size,0)) if(status == FILE_OK) result = TRUE; if(result == TRUE) cout << "Datei vorhanden!"; else cout << "Datei nicht vorhanden!"; } file.close(); getchar(); InternetCloseHandle(hdata); InternetCloseHandle(hhost); InternetCloseHandle(hnet); return 0; }
-
Wie gesagt so kann es nicht klappen, weil result dann sobald eine Datei gefunden wurde auf true gesetzt wird. Es wird aber nie mehr zurückgesetzt! Also entweder ein result=false an den Anfang der while Schleife oder
if(status == FILE_OK) result = TRUE; else result = FALSE;
Wenn es dann nicht klappt, hab ich keine Ahnung, aber geh doch mal mit Einzelschritten durch das Programm mit deinem Debugger und guck dir result an!
-
Gibt das Gleiche in grün
Ausgabe:
Datei nicht gefunden! Datei nicht gefunden! Datei gefunden!
-
Schreib mal unter "cout << "Datei nicht gefunden!"" noch "result = FALSE;", vielleicht funktioniert's dann.
cya
-
Leider nicht
-
Original erstellt von <eonic+d>:
**Gibt das Gleiche in grünAusgabe:
Datei nicht gefunden! Datei nicht gefunden! Datei gefunden!**Zeig doch mal bitte den Code wo du das drinhast, ich kann mir das nicht recht vorstellen.
-
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wininet.h>
#include <iostream>
#include <fstream.h>
#include <string>
using namespace std;const DWORD FILE_OK = 3158066;
HINTERNET hnet, hhost, hdata;
DWORD status = 0;
DWORD size = sizeof(DWORD);char buffer[80];
int main()
{hnet = InternetOpen("Inet",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
hhost = InternetConnect(hnet,"www.c-plusplus.net",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);ifstream file;
file.open("string.dat", ios::in | ios::binary);if (!file.is_open())
cout << "Error opening file";while (!file.eof())
{
BOOL result = FALSE; // Ist doch richtig, oder?
file.getline(buffer,80);hdata = HttpOpenRequest(hhost,"HEAD",buffer,NULL,NULL,NULL,0,0);
if(hdata == NULL)
result = FALSE;HttpSendRequest(hdata,NULL,0,0,0);
if(HttpQueryInfo(hdata,HTTP_QUERY_STATUS_CODE,&status,&size,0))
if(status == FILE_OK)
result = TRUE;if(result == TRUE)
cout << "Datei vorhanden!";
else{
cout << "Datei nicht vorhanden!"; result = FALSE;}}
file.close();
getchar();
InternetCloseHandle(hdata);
InternetCloseHandle(hhost);
InternetCloseHandle(hnet);return 0;
}
-
Sorry da weiß ich wirklich nicht weiter.
-
Probier mal normale Strings aus, die nicht aus der Datei kommen, vielleicht stimmt was am Einlesen der Datei nicht.
cya
-
Wie würdet ihr es denn machen, wenn ihr Strings aus einer Text Datei einlesen und per HttpOpenRequest einzeln überprüfen müsstet?
-
zu spät gesehen...
das habe ich schon gemacht und da funzt es, nur weil es sehr viele später einmal werden sollen, wollte ich die in einer Datei anlegen