Vergleich mit LONG



  • Hallo zusammen,

    ich bin Einsteiger und verzweifle gerade an einer simplen Abfrage:

    LONG filesize = getfilesize( temp );
    
    if(filesize > 3)
    {
     ....[cpp]
    }
    

    Die Methode getfilesize hat folgenden Aufbau:

    LONG getfilesize( CString filename )
    {
    	CFileStatus status;
    	if( !CFile::GetStatus( filename, status ) )
    		return 0;
    	return status.m_size;
    }
    

    Das Programm stürzt bei der If-Anweisung jedoch ab. Was mache ich falsch? Kann ich Long nicht vergleichen?

    Gruß,
    Tim


  • Mod

    An dem Code, den Du hier zeigst liegt es mit Sicherheit nicht.



  • Hallo Martin,

    vielen Dank für Deine Antwort - Seltsam, wenn ich die Abfrage entferne, läuft das Programm ohne Probleme.



  • TimW schrieb:

    Hallo Martin,

    vielen Dank für Deine Antwort - Seltsam, wenn ich die Abfrage entferne, läuft das Programm ohne Probleme.

    Dann zeig doch mal etwas mehr vom Code.



  • Gerne:

    CString temp;
    temp.Format( _T("%sdata\\datei.txt"), GetDLLPath() );
    
    LONG filesize = getfilesize( temp );
    
    if(filesize > 3)
    {
      if( getfilesize( temp ) % 228 != 0 )
    	AfxMessageBox( _T("Dateiinkonsistent" ) );
    }
    

    Mehr ist es dann tatsächlich nicht. Wenn ich die If-Anweisung entferne, läuft das Programm ohne Probleme, mit stürzt es ab. Ich arbeite mit Embedded VC 4.0


  • Mod

    Wie sieht GetDLLPath aus?



  • sprengst Du Dir den Stack? Check mal die Länge von filename. Nicht das der länger als MAX_PATH ist. Bekommst Du von GetDLLPath() auch den abschliessenden backslash zurück?

    Ach, und m_size ist ULONGLONG ?!



  • Guten Morgen,

    folgend die GetDLLPath() Methode:

    CString GetDLLPath()
    {
    	CString temp;
    	wchar_t Data[256];
    	int n;
    	GetModuleFileName(AfxGetInstanceHandle(), Data, 256);
    	temp = Data;
    	n = temp.ReverseFind( '\\' );
    	if( n != -1 )
    		temp = temp.Left( n ) + "\\";
    
    	return temp;
    }
    

    Die Anwendung steigt tatsächlich nur bei der If-Anweisung aus. Ein paar Zeilen später bei dem Modulo gibt es keine Probleme, auch dann nicht wenn ich dort ebenfalls die Variable filesize verwende, die ursprünglich eigentlich auch dort steht.


  • Mod

    Der Code ist zwar nicht schön, er enthält auch Fehler (CString ohne cast in Format), aber ich wiederhole mich: Er enthält keinen Fehler, der zu einem Crash führt.

    Was sagt der Debugger exakt?


Anmelden zum Antworten