Vergleich schlägt fehl
-
if(finddata.cFileName == "80040A_NA2009_ENUS_IC.zip")//finddata.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY &&WIN32_FIND_DATA finddata;Hallo,
ich überpfüfe auf eine FTP Laufwerk ob es eine bestimmte Datei gibt. Ich weiß ganz genau, dass es die Datei gibt mit der verglichen wird da ich sie aus Testzwecken extra erstellt habe. Allerding wird nie das IF ausgeführt. Woran kann es liegen?
-
Ich tipp mal drauf, dass cFileName kein string, sondern ein TCHAR[] ist.
-
Du könntest z.B. strcmp/strncmp benutzen. Oder erst mal nach std::string umwandeln...
-
danke erstmal euch beiden. Es ist TCHAR und ich habe es jetzt mit strncmp gelöst;-)
-
Es ist TCHAR und ich habe es jetzt mit strncmp gelöst;-)
Aber Vorsicht!
TCHAR ist ein Typ, der je nach Laune der Windows-Version entweder 1-Byte-Zeichen oder Mehr-Byte-Zeichen verwendet. Und bei bei Mehr-Byte-Zeichen können vor dem Ende eines Strings Nullbytes auftauchen.Deshalb bietet Windows eine Funktion
lstrcmp, die mit Zeigern auf TCHAR arbeitet.
Dein Code funktioniert vielleicht auch mitstrcmp, aber das ist nicht für alle Windows-Versionen garantiert.Portabel wäre:
lstrcmp(finddata.cFileName, TEXT("80040A_NA2009_ENUS_IC.zip")) // statt strcmp(finddata.cFileName, "80040A_NA2009_ENUS_IC.zip")
-
Aha...hmm..also das Problem sollte natürlich nicht auftreten;-)
also ist "lstrcmp" auch besser als "strncmp"?
-
secondsun schrieb:
also ist "lstrcmp" auch besser als "strncmp"?
Ich gehe mal auf den Vergleich der Familien (lstr*** und str***) ein, nicht darauf, dass es zwischen (l)strcmp und (l)strncmp auch noch funktionale Unterschiede gibt.
Wenn Du char-Zeichenketten vergleichen willst, ist lstrcmp nicht "besser", sondern schlicht und ergreifend falsch. Dummerweise würde es, wenn Du Programme im ANSI-Modus übersetzt, sogar funktionieren.
Wenn Du TCHAR-Zeichenketten vergleichen willst, ist strcmp falsch. Dummerweise würde es, wenn Du Programme im ANSI-Modus übersetzt, sogar funktionieren.
Du siehst: "Besser" ist, was für den konkreten Fall geeignet ist.
-
okay...danke;-)
-
Für TCHAR gibts aus tchar.h Routinen:
http://msdn.microsoft.com/en-us/library/e0z9k731.aspx