WIN32/WINAPI File I/O



  • mat65 schrieb:

    wie kann ich überprüfen ob die Datei richtig eingelesen wurde?

    In meinem Beitrag wo "Samstagmorgen? 😕 " steht hatte ich das geschrieben. Datei kann nicht geöffnet werden, Datei kann nicht gelesen werden usw. Ich hoffe das ist verständlich. Die WinAPI-Funktionen kann man bei der MSDN nachschlagen.

    Dann noch ein printf-Tutorial weil ich faul bin. Ich hoffe du kannst halbwegs englisch.
    fprintf tut dasselbe für Dateien, sprintf dasselbe für Strings, die w-Varianten für Unicode und die scan-Varianten zum Lesen statt Schreiben.
    Und ja, wenn man eh schon swscanf benutzt kann man auch gleich fwscanf benutzen.



  • Moin nwp3,
    weiter geht's. Ich habe deine Hinweise eingefügt und kompeliert, alles gut, nix passiert 😕 :

    int rueckgabewert = swscanf(buffer, L"Name: Wert:\n\fABpx0 %ff\n\fABpy0 %ff\n\fABpz0 %ff\n",&fABpx0, &fABpy0, &fABpz0); 
    
    //AREA//
    //fABpx0	= 0.0f; fABpy0	= 0.0f; fABpz0	= 1.0f; iTEX_AREA_1 = 2;		//"C:\\AMP\\IMAGE\\AIDA_14_Playground.jpg"
    

    iTEX_AREA_1 = 2 (int iTEX_AREA_1) wie lese ich int aus, wenn %f float ist?

    int main ()
    {
      char str[] = "This is a sample string";
      char * pch;
      printf ("Looking for the 's' character in \"%s\"...\n",str);
      pch=strchr(str,'s');
      while (pch!=NULL)
      {
        printf ("found at %d\n",pch-str+1);
        pch=strchr(pch+1,'s');
      }
      return 0;
    }
    

    habe ich gefunden, ... ist unser "buffer" hier "str"? gibt es iwo eine Tabelle mit diesen %f,%ff vielleicht würde das helfen=?
    Was du schreibst verstehe ich, kann es aber iwie nicht umsetzen? Ich denke, ich habs, schwupps ist es wieder weg.
    Gruß Mathias

    PS:

    und schon mit Zeilennummern, lerne ... langsam



  • mwp3 vielen Dank für den Link 🙂
    Ich möchte nur die Variablen aus der Datei auslesen und gern auf einmal für alle Koordinaten und Texturen (das sind nur knapp 200 zeilen)
    Muß auch nicht pro Frame sein und gern im Format fABpx0 0.0f, bzw iTEX_AREA_1 2, mit 2 als integer.
    Hätte nie gedacht, dass das so kompliziert ist, vor 20 Jahren mit TP 5 war das irgendwie anders.
    Aufgeben gilt nicht, aber alleine geht es auch nicht.
    GM



  • nwp3, lesen hilft mir ...
    Specifier Description Example
    f Display the floating point number using decimal representation 3.1415
    e Display the floating point number using scientific notation with e 1.86e6 (same as 1,860,000)
    E Like e, but with a capital E in the output 1.86E6
    g Use shorter of the two representations: f or e 3.1 or 1.86e6
    G Like g, except uses the shorter of f or E 3.1 or 1.86E6

    Variable type Length Modifier Example
    short int, unsigned short int h short int i = 3; printf( "%hd", i );
    long int or unsigned long int l long int i = 3; printf( "%ld", i );
    wide characters or strings l wchar_t* wide_str = L"Wide String"; printf( "%ls", wide_str );
    long double L long double d = 3.1415926535; printf( "%Lg", d );

    [code="cpp"]
    int rueckgabewert = swscanf(buffer, L"Name: Wert:\n\fABpx0 %ff\n\fABpy0 %ff\n\fABpz0 %ff\n", %h\n,
    &fABpx0, &fABpy0, &fABpz0, &iTEX_AREA_1);
    if (rueckgabewert != 4)
    printf("Konnte %d/4 Variablen einlesen, Formatstring stimmt nicht mit Dateiinhalt überein", rueckgabewert);
    [/code]
    if (rueckgabewert != 4) //ungleich 4
    printf("Konnte ?KEINE? %d/4 Variablen einlesen, Formatstring stimmt nicht mit Dateiinhalt überein", rueckgabewert);

    oder habe ich da jetzt einen Denkfehler?
    GM



  • Moin nwp3,

    ich habe wprintf, swscanf,printf wie beschrieben, aber keinen Erfolg.
    Welche Frage sollte ich jetzt stellen? Mir fällt nur "woran liegt's" ein.
    Ich erhalte keine Fehlermeldung beim Kompilieren und die Ausführung erfolgt eben nur der die entsprechenden Werte. Wie geht's jetzt weiter. Gruß Mathias



  • Hab denn Thread nur überflogen. Aber Pauschal würde ich sagen, debug das ganze einfach mal dann siehst du schnell wo das Problem liegt.



  • moin lowbyte, ich debuge mit F5, es gibt keine Fehlermeldung. Gruß



  • oh mein gott



  • danke, ..., daran habe ich am Anfang dieses Projektes auch schon gedacht,
    es half in Puncto Leidensfähigkeit und Durchhaltevermögen.



  • Dann kannst du denn debugger nicht bedienen, oder weisst nichts damit anzufangen. Denn auf Fehlermeldungen vom debugger zu warten...ist irgendwie... 🙄



  • Moin lowbyte, ... "einem "dummen" zeigen, dass du "schlauer" bist" (P.Fox), was hilft es Dir nachts um zwei? Würde mich freuen, wenn Du mir weiterhilfst. Ich google mich nun weiter zum Thema debuging durch.



  • Problem eingrenzen und danach mit Breakpoints step by step die Stelle durchgehen. Überprüfen ob die Variablen auch die Werte haben die Du brauchst, oder ob Funktionen die richtigen Parameter haben. So siehst du relativ schnell ob du mittendrin etwas zerschiesst. Und immer schön Rückgabewerte Prüfen!
    Dann findest du früher oder später dein miesen Bug. Oder hast du doch irgendwo ein Logikfehler drin?! Finde es heraus...

    Ps: Und das du dumm bist, habe ich nie gesagt.



  • Moin Lowbyte, danke für due Anregung:

    file 0x00000100 void *
    wprintf CXX0017: Fehler: Symbol "wprintf" nicht gefunden
    INVALID_HANDLE_VALUE CXX0017: Fehler: Symbol "INVALID_HANDLE_VALUE" nicht gefunden
    +buffer 0x001deba8 "䅦灂へ〉〮൦昊䉁祰र⸰昰਍䅦灂ぺㄉ〮൦찊쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌" wchar_t [50]
    read 39 unsigned long
    wprintf CXX0017: Fehler: Symbol "wprintf" nicht gefunden
    read 39 unsigned long
    rueckgabewert 0 int
    printf CXX0017: Fehler: Symbol "printf" nicht gefunden
    getReadableErrorMessage 0x00bd1f70 getReadableErrorMessage(void) const wchar_t * (void)
    file 0x00000100 void *
    fABpx0 -1.0737418e+008 float //0.0f
    fABpy0 -1.0737418e+008 float //0.0f
    fABpz0 -1.0737418e+008 float //1.0f

    Debuging mit Haltepunkt und Überwachung, sieht iwie nicht gut aus 😞



  • Zeig mal dein Code! Ausserdem würde ich dir raten die Grundlagen der Sprache C zu lernen. So wird das nämlich nicht. Und Sprüche wie "MSDN verstehe ich nicht" ist schonmal nicht gut, weil es das a und o für die WinApi Programmierung ist. Wie willst du denn Die Funktionenen verstehen wenn du nicht mal weisst wie sie funktionieren!?



  • Moin lowbyte,

    HANDLE file = CreateFileA("C:\\AMP\\AMP1.txt", GENERIC_READ, 0, 0, OPEN_ALWAYS, 0, 0);
    	if (file == INVALID_HANDLE_VALUE){ 
    		wprintf(L"Konnte Datei nicht öffnen: %s\n", getReadableErrorMessage()); 
    		//return 0; 
    	} 
    		wchar_t buffer[50]; 
    		DWORD read; 
    	if (!ReadFile(file, buffer, sizeof buffer / sizeof *buffer - 1, &read, 0)){ 
    		wprintf(L"Konnte Datei nicht lesen: %s\n", getReadableErrorMessage()); 
    		//return 0;
    	} 
    	buffer[read] = 0; wprintf(L"Inhalt der Datei:\n%s\n", buffer); 
    	CloseHandle(file); 
    	int rueckgabewert = swscanf(buffer, L"Name: Wert:\n\fABpx0 %ff\n\fABpy0 %ff\n\fABpz0 %ff\n",&fABpx0, &fABpy0, &fABpz0); 
    	if (rueckgabewert != 3) 
        printf("Konnte %d/3 Variablen einlesen, Formatstring stimmt nicht mit Dateiinhalt überein", rueckgabewert);
    	////////////////////ReadFile////////////////////////////
    	//AREA//
    	/*fABpx0	= 0.0f; fABpy0	= 0.0f; fABpz0	= 1.0f; iTEX_AREA_1 = 2;*/		//"C:\\AMP\\IMAGE\\AIDA_14_Playground.jpg"
    

    Das ist der Code, der zb. fABpx0 0.0f aus der Datei auslesen soll und dann mit der Variablen fABpx0 als Koordinate den BasisPunkt für eine Grafik bestimmt. Danke für deine Hilfe.



  • die Beispiele für prinf, writef, swcanf habe ich nachvollziehen können (verstanden) und kann auch beim debuggen folgen, danke für den Hinweis. Aber das ist eben Konsole und nicht Win.



  • Ja genau ReadFile() ist winapi... Schau dein ReadFile call mal an, das geht so nicht! Ausserdem wie hantierst du mit sizeof? Alles Grundlagen...

    Sieh auf msdn nach wie das genau ist mit ReadFile... Also wenn du keine Fehler beim übersetzen hast dan weiss ich auch nicht...



  • Danke, der Code ist ist von nwp3, ok geht so nicht.
    Alles neue Erfahrungen, kurz vor der kompletten entnervung, aber ich halte durch.
    Wie komme ich dazu, dass Du dein Wissen mit mir teilst. Ich bin zu fast allem bereit ;).
    Ich suche jetzt readfile unter msdn, da steht dann auch createfile und so. Vlt läst du dich ja noch erweichen,



  • Kollegen, vielen Dank für eure Unterstützung.
    Ich probier es mal mit einem Bild.
    Ich war einkaufen, die Einkäufe stehen in der Wohnung, der Kühlschrank noch auf der Strasse.
    Jetzt suche ich jmd der mir den Kühlschrank in die Wohnung stellt.
    Ich bekomme Tipps für Krafttraining, gesunde Ernährung usw ..., das hilft jetzt nicht wirklich.
    Ich will weiter Opengl kochen und nicht Kühlschränke tragen können.
    Wenn noch jmd helfen möchte wäre ich sehr dankbar, ansonsten bin ich raus.
    Enjoy the summer ...



  • du willst opengl programme schreiben aber kannst nicht mal die einfachsten Grundlagen... dann biste wohl raus. Deine Opengl code möchte ich gar nicht erst sehen.


Anmelden zum Antworten