GetLastError() - Richtiger Einsatz?



  • Meien frage ist ob ich in diesem Fall GetLastError() sinnvoll nutzen kann...

    ich lösche nat. nicht so dateien in einer schleife ...
    das ist nur beispiel code...
    aber meine frage bezieht sich darauf ob wenn dabei die datei nicht gelöscht werden kann oder andere fehler auftreten ob dann der richtige "error-code" ausgegeben wird... ?
    der passend zum DeleteFile in diesem beispiel wäre....

    Das ist mein Beispiel.

    std::string dateiname_pfad="C:\\Beispiel\\Beispiel\\";
    
            for(int x=0;x<100;x++)
    	{
    
    		std::stringstream test;
    		test << x;
    		std::string dateiname_pfad_2;
    		dateiname_pfad_2=dateiname_pfad+test.str()+".txt";
    
    		std::cout << dateiname_pfad_2 << std::endl;
    
    		if(!DeleteFile(dateiname_pfad_2.c_str()))
    		{
    			std::cout<< GetLastError()<<std::endl;
    		}
    	}
    




  • Belli schrieb:

    Jo. Siehe auch:
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915(v=vs.85).aspx

    jo stimmt hab ich überlesen 😞 ...
    vielen dank! 👍

    frage gelöst thema kann geschlossen werden ... bzw. hat sich erledigt! 😃



  • Wenn du´s schön haben willst kannst du die Fehlermeldung auch im Klartext bestimmen, siehe hier.



  • DocShoe schrieb:

    Wenn du´s schön haben willst kannst du die Fehlermeldung auch im Klartext bestimmen, siehe hier.

    jop mach ich schon 🙂 ...
    danke trozdem für den tipp, nur das basiert ja auf dem "fehlercode" und wenn der falsch ist dann ist auch die meldung die falsche...
    da hatte ich jetzt etwas bedenken...
    nach ein paar tests...

    danke viel mals für alle hilfen und hinweise 🙂



  • Bei GetLastError immer darauf achten dass man GetLastError sofort nach der Funktion aufruft die fehlgeschlagen ist.
    In deinem Fall müsste das passen, aber ich bin der Meinung dass es nicht schaden kann folgendes Muster zu verwenden:

    if (!DeleteFile(dateiname_pfad_2.c_str()))
            {
                DWORD const error = GetLastError(); // IMMER als erste Zeile direkt nach dem fehlgeschlagenen Aufruf.
                std::cout<< error << std::endl;
            }
    

    Wenn zwischen dem fehlgeschlagenen Aufruf und GetLastError noch anderer Code ausgeführt wird, kann es sonst passieren dass man einen falschen Error-Code zurückbekommt. Bzw. auch einfach 0 für "alles OK", falls eine Funktion aufgerufen wurde die auch im Erfolgsfall den "last error" setzt.
    Was dann zu so lustigen Fehlermeldungen wie "Error: The operation completed successfully." führen kann.


Anmelden zum Antworten