WIN32/WINAPI File I/O



  • 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.



  • Moin, ein kleiner Teilerfolg,die Werte stehen jetzt im Buffer,

    wchar_t buffer[1024]; 
    DWORD read; 
    int rueckgabewert = swscanf(buffer, L"Name: Wert:\r\nfABpx0 %f\r\nfABpy0 %f\r\nfABpz0 %f\r\niTEX_AREA_1 %d",&fABpx0, &fABpy0, &fABpz0,&iTEX_AREA_1);
    

    rueckgabewert = 0
    buffer = 0x0023ea44 "Name: Wert:
    fABpx0 0.0
    fABpy0 0.0
    fABpz0 1.0
    iTEX_AREA_1 2쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌"
    fABpx0 = -1.0737418e+008;fABpy0 = -1.0737418e+008;fABpz0 = -1.0737418e+008;iTEX_AREA_1 = -858993460
    Wie ordne ich nun die Werte aus dem Buffer den entsprechenden Variablen zu.



  • Hi mat65,
    Mal ne kleine Frage(das soll jetzt nicht unhöflich wirken): Beherrschst du die Grundlagen des "standard" C++? Ich würde mich erstmal um Consolenprogramme kümmern und da rumexperimentieren. Als ich angefangen habe wollte ich auch sofort mit der WinApi arbeiten, aber das geht (leider) nicht ohne ein bisschen Erfahrung. Ich fand die MSDN Artikel früher auch ziemlich kompliziert/unverständlich formuliert. Ich weiß, dass du das jetzt nicht hören willst, aber wie wärs, du übst erstmal noch ein bisschen mit der Console?
    MfG
    DragonRaider



  • Moin Dragonraider,
    nein, beherrsche ich nicht. Ich suche auch nur eine Lösung für den Datenimport für mein Projekt, das nun mal eine grafische Anwendung (opengl)auf Basis der WIn32Api ist. Als Consolenanwenung bekommme ich einiges hin, aber das hilft mir jetzt nicht weiter, ich kriege die Transferleistung nicht hin. Ich habe dazu auch schon ein Jobangebot eingestellt. Es ist mir also ERNST mit meinem Vorhaben. Ich bin nicht auf dem Weg zum C++ Programmierer, ich suche nur eine Lösung für meine Aufgabe. Wer mir also helfen kann, dessen Schaden soll es nicht. www.stellenwerk-hamburg.de Gruß Mathias


Anmelden zum Antworten