FILE * Problem...



  • hallo liebe coder,

    ich bekomme folgendes nicht hin... obwohl ich eigentlich der meinung bin es richtig anzusprechen....

    void CRegressionDlg::OnBnClickedButton4()
    {
    	// Buffer anlegen
    	char	buffer[1000]={0};
    
    	// TRUE = oeffnen
    	CFileDialog dlg(TRUE, "txt", "*.txt");
    	if ( dlg.DoModal() == IDOK )
    	{
    		// Speicher fuer vollstaendige Pfadangabe
    		CFile file;
    		// Gibt ein Objekt mit der vollst. Pfadangabe zurück
    		VERIFY(file.Open(dlg.GetPathName(), CFile::modeRead));
    
    		FILE *hIn = fopen ( dlg.GetFileName(), "rt" );
    		if ( hIn )
    		{
    			while ( !ferror(hIn) && !feof(hIn) )
    			{
    			if ( !fgets ( buffer, sizeof(buffer), hIn ) )
    					break;
    			if ( sscanf ( buffer, "%lf %lf", &m_valX, &m_valY )!=2)
    					break;
    
    			UpdateData(FALSE);
    			OnBtnAdd();
    			}
    		fclose ( hIn );
    		}
    
    			//// Daten in Liste schreiben
    			//for(int ii=0;!file.Read();ii++)
    			//{
    			//	buffer[ii]= file.get();
    			//	std::cout << buffer[ii];
    			//};
    
    			// Schlisst das File wieder
    			file.Close();
    	}
    };
    

    bei

    FILE *hIn = fopen ( dlg.GetFileName(), "rt" );
    

    bekommt hIn einen NULLZeiger... wieso ?

    danke für die schnelle hilfe....



  • Du hast doch schon ein CFile auf dein Ziel geöffnet, wozu mußt du dann noch mit nackten FILE-Zeigern hantieren? (oder umgekehrt - wenn du die Daten über die <stdio.h> Funktionen einlesen willst, wozu brauchst du dein CFile?)



  • mein programmier-guru will dass ich das so mach...

    warum geht es denn so nicht...?
    oder wie würde es eher gehen ?

    gruss...



  • Wenn ich raten müsste, würde ich sagen, daß das CFile den Dateizugriff für sich reserviert hat - das müsstest du erst schließen, bevor jemand anderes (inklusive fopen()) die Datei öffnen darf.

    PS: Was will "dein Programmier-Guru"? Daß du die Datei querbeet mit allen verfügbaren File-IO Bibliotheken öffnest und im gemischten Betrieb ausliest? (ich find's ja erstaunlich, daß sich da noch kein std::ifstream dazwischengemogelt hat :D)

    PPS: Ist dir eigentlich aufgefallen, daß du dich ins falsche Board verlaufen hast? Hier geht es nicht um MFC.



  • also...

    herr guru will, dass ich mit nem button in meinem dialogfenster windowsmäßig ne datei öffnen kann...

    CFile soll sich angeblich dann alles zum auzsgewähltem merken (pfad, grösse)

    nun soll ich jedoch diese daten, die Cfile bereit hält, nutzen....
    und zwar mit FILE.... ?!?!?!

    kannst du mir ne bessere lösung hingeben? also könnte ich mit CFile doch alles auslesen und drauf zugreifen?

    danke,
    gruss...

    PS.: ...aber ich bin doch im "...C/C++ Forum..." ...
    ... es gibt ja auch noch ein "...MFC...", jedoch habe ich nicht da rein
    geschrieben... 😕 ? 👎 ?



  • Ja, CFile kann einiges mehr als sich nur "alles zum auzsgewähltem merken" - das bietet auch Methoden, mit denen du an den Dateiinhalt herankommst. Aber da du anscheinend auf eine Zeilenstruktur achten willst (legt fgets() zumindest nahe), kannst du gleich CStdioFile verwenden - das bietet alle Methoden von CFile und zusätzlich noch ReadLine() als Entsprechung zu deinem fgets() (die Methoden von CFile arbeiten mit fester Block-Größe).

    PS: Ja, das Hauptthema des Forums ist "C und C++", aber in diesem Unterforum geht es um das Teilgebiet "C++/CLI" (eine Weiterentwicklung von C++ für die .NET-Umgebung)*. MFC (Microsoft Foundation Classes) ist eine Bibliothek zur Ansteuerung von Windows-Funktionen in C++ - daraus stammen z.B. die CFileDialog und CFile, die du oben verwendest.

    * Wenn du mit Begriffen wie "C++/CLI" und ".NET" nichts anfangen kannst, bist du höchstwahrscheinlich im falschen Board gelandet 😃


Log in to reply