Registreer FAQ Ledenlijst Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 12-01-2004, 17:07
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Ik ben momenteel bezig met een simpele FTP client, maar zelfs dat wil niet lukken. Ipv Winsock maak ik gebruik van WinInet, een versimpeld API waarmee je toch HTTP/FTP/Gopher applicaties kan maken. Anyway, ik kan nu dus wel connecten naar mn FTP, en ook inloggen, maar nu wil ik een lijst met wat erop staat.

Code:
/************** 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
	}
FtpFindFirstFile() zoekt het eerst bestand, slaat dat op in win32_find_data (struct WIN32_FIND_DATA), en geeft als return een handle waarmee je evt verder kan zoeken naar volgende bestanden(als de functie slaagt) en false als er een fout optreed. Nu gaat dit allemaal goed, vervolgens wil ik met InternetFindNextFile() alle volgende bestanden vinden(omdat ik als zoekteken * doorgeef). Maar ik krijg echter een 997 error.
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
Met citaat reageren
Advertentie
Oud 12-01-2004, 18:20
Screaming Slave
Screaming Slave is offline
nog nooit met die functie gewerkt, maar uhm, probeer eens van die laatste if statement,

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

eens gewoon dit te maken.

Code:
DWORD dw=GetLastError();
cout<<dw<<endl;    //RETURNS A IO ERROR
je weet namelijk al dat Internet...data)) == false, aangezien het programma daar aangeland is (buiten de while loop). als je dan nog een keer FindNextFile doet, flipt ie misschien (ofzo). maar zoals gezegd, ken de achtergrond niet zo goed.
Met citaat reageren
Oud 12-01-2004, 18:53
Verwijderd
Dat hij een error returned is opzich wel logisch.

De laatste call zal altijd false zijn. Je doet eerst een while en daarna weer een if met dezelfde conditie. Die is altijd false

Voor de rest zou ik gewoon eens cout << "hello world" in de compound block van mijn while zetten om te kijken of de functie InternetFindNextFile() ueberhaupt waar wordt.
Met citaat reageren
Oud 12-01-2004, 18:54
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
ja maar het probleem is dus juist dat het helemaal niet false moet zijn, hij moet true geven, maar waarom ie dat neit doet weet ik niet
Met citaat reageren
Oud 12-01-2004, 18:55
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
******** schreef op 12-01-2004 @ 19:53:
Dat hij een error returned is opzich wel logisch.

De laatste call zal altijd false zijn. Je doet eerst een while en daarna weer een if met dezelfde conditie. Die is altijd false

Voor de rest zou ik gewoon eens cout << "hello world" in de compound block van mijn while zetten om te kijken of de functie InternetFindNextFile() ueberhaupt waar wordt.
daar heb ik natuurlijk een geile debugger voor, hij slaat gewoon de while lus over omdat de functie false returnt. En dat is juist het probleem, waaaaaaarom returnt ie false?
Met citaat reageren
Oud 12-01-2004, 19:12
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Citaat:
Dr HenDre schreef op 12-01-2004 @ 18:07:


Code:
/***** FtpFindFirsFile()***********/	

if((findFile =	FtpFindFirstFile(handleInternet,...

Die " findFile = FtpFindFirstFile", moet dat niet == zijn ipv = ?
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 12-01-2004, 19:16
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
Kawoutertje schreef op 12-01-2004 @ 20:12:
Die " findFile = FtpFindFirstFile", moet dat niet == zijn ipv = ?
neej want in finFile moet de return waarde(een handle) van FtpFindFirstFile() worden opgeslagen. Je krijgt dan eik de condition

if(findFile), en dat werkt gewoon
Met citaat reageren
Oud 12-01-2004, 19:21
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Citaat:
Dr HenDre schreef op 12-01-2004 @ 20:16:
neej want in finFile moet de return waarde(een handle) van FtpFindFirstFile() worden opgeslagen. Je krijgt dan eik de condition

if(findFile), en dat werkt gewoon
laat die "findFile =" er dan toch gewoon af, dat werkt normaal toch ook, niet ?

Nu ja, verder zie ik het probleem eigenlijk niet, sorry
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 12-01-2004, 19:23
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
Kawoutertje schreef op 12-01-2004 @ 20:21:
laat die "findFile =" er dan toch gewoon af, dat werkt normaal toch ook, niet ?

Nu ja, verder zie ik het probleem eigenlijk niet, sorry
Het werkt wel, maar FtpFindFirstFile returnt een handle die je nodig hebt om door te gaan met zoeken. Want de functie InternetFindNextFile() accepteert als argument de handle die FtpFindFirstFile() returnt en de output buffer
Met citaat reageren
Oud 12-01-2004, 19:28
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Zou het dan mss kunnen dat de true of false waarde die in de findFile wordt opgeslagen (daar in je if-statement) slechts lokaal wordt opgeslagen en dus eigenlijk terug op de vorige waarde springt nadat je uit het if-statement daar bent ?

Ik weet het niet hoor, ik ken niet zoveel van C++
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 12-01-2004, 19:40
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
Kawoutertje schreef op 12-01-2004 @ 20:28:
Zou het dan mss kunnen dat de true of false waarde die in de findFile wordt opgeslagen (daar in je if-statement) slechts lokaal wordt opgeslagen en dus eigenlijk terug op de vorige waarde springt nadat je uit het if-statement daar bent ?

Ik weet het niet hoor, ik ken niet zoveel van C++
Nope, dat werkt ook niet. Was op zich niet zon heel gek idee, net effe geprobeerd, maar helaas Ik heb findFile als helemaal in het begin van mn main gedeclareerd, en ik hang er bij de if() alleen maar een waarde aan.

Code:
int main(void)
{
	HINTERNET handleInternet, handleConnect, findFile=0;
//rest va de code
}
Ik heb er nu het volgende van gemaakt, maar ook dat werkt niet

Code:
/************** FtpFindFirsFile()***********************/	
	
	findFile =	FtpFindFirstFile(
						 handleInternet,
						 "*\0",
						 &win32_find_data,
						 INTERNET_FLAG_RESYNCHRONIZE,
						 NULL);


	if(findFile != NULL)
	{
		cout<<"FtpFindFirstFile() succed\n";
		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;
	}
	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
	}
Met citaat reageren
Oud 12-01-2004, 19:58
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
dus als ik het goed begrijp zit er in de findFile in't begin een 0, en die wordt zoiezo overschreven door die FtpFindFirstFile ?
Wat voor waarde geeft die functie terug ? En wanneer moet dat if-statement true zijn ?

Zou het mss kunnen zijn dat die InternetFindNextFile geen booleaanse waarde terug geeft ? Wat doet die functie eigenlijk juist ?
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 12-01-2004, 20:05
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
FindFirstFile()
Citaat:
Return Values
Returns a valid handle for the request if the directory enumeration was started successfully, or returns NULL otherwise. To get a specific error message, call GetLastError. If GetLastError returns ERROR_INTERNET_EXTENDED_ERROR, as in the case where the function finds no matching files, call the InternetGetLastResponseInfo function to retrieve the extended error text, as documented in Handling Errors.
findFile zou dus true moeten zijn(non-zero) als het werkt en NULL(zero) als er een error optreed.

InternetFindNextFile()

Citaat:
Return Values
Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError. If the function finds no matching files, GetLastError returns ERROR_NO_MORE_FILES.
Met citaat reageren
Oud 12-01-2004, 20:38
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Goh man, ik zie het echt niet hoor.

Hier nog enkele ideetjes waar het mss aan zou kunnen liggen maar hoogst waarschijnlijk ben je er niets mee hoor.

1.
Citaat:
After calling FtpFindFirstFile and until calling InternetCloseHandle, the application cannot call FtpFindFirstFile again on the given FTP session handle
Hieraan zal't waarschijnlijk niet liggen, want je roept die FtpFindFirstFile maar éénmaal op.

2. Ik vind die uitleg over die InternetFindNextFile nogal vaag. Zou het mss kunnen dat ie false moet zijn opdat jouw while-lus in werking zou treden, en false als ie eruit springt ? Wsl zal het dat ook niet zijn, maar je weet maar nooit !

3. Probeer anders eens je FindFirstFile(parameters) rechtstreeks in je InternetFindNExtFile(<hier dus>, parameters) te zetten.

Het zou echt wel sterk zijn mochten één van deze dingen het probleem oplossen, maar je kan maar proberen eh, misschien heb je wel geluk
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 12-01-2004, 21:41
Verwijderd
Geef ipv "*\0" gewoon eens null als parameter mee bij de findfirst.
Met citaat reageren
Oud 12-01-2004, 21:46
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
******** schreef op 12-01-2004 @ 22:41:
Geef ipv "*\0" gewoon eens null als parameter mee bij de findfirst.
Al gedaan, wil ook niet
Met citaat reageren
Oud 12-01-2004, 22:03
Verwijderd
http://www.easysea.com/diannao/prog/c/bcbu/025.htm

Geef je in je connection functie ook hard mee dat het om een FTP verbinding gaat?

Dus, eerst:

FINet = InternetOpen("WININET1", 0, NULL, 0, 0);

Daarna:

FFtpHandle = InternetConnect(FINet, FServer, 0, FUserID, FPassword, INTERNET_SERVICE_FTP, 0, 255);

Anders weet de InternetFindNextFile() namelijk niet of het om een FTP of Gopher request gaat.
Met citaat reageren
Oud 12-01-2004, 22:04
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
Citaat:
******** schreef op 12-01-2004 @ 23:03:
http://www.easysea.com/diannao/prog/c/bcbu/025.htm

Geef je in je connection string ook hard mee dat het om een FTP verbinding gaat?

Dus, eerst:

FINet = InternetOpen("WININET1", 0, NULL, 0, 0);

Daarna:

FFtpHandle = InternetConnect(FINet, FServer, 0, FUserID, FPassword, INTERNET_SERVICE_FTP, 0, 255);

Anders weet de InternetFindNextFile() namelijk niet of het om een FTP of Gopher request gaat.
jep
http://rafb.net/paste/results/sJG11956.html
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
Software & Hardware Bestanden zoeken met HTML in een directorystructuur
Plusmarktboy
6 12-01-2004 15:32


Alle tijden zijn GMT +1. Het is nu 06:01.