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