ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
586
586
EMPFEHLEN
-
Hallo, ich bins mal wieder...
Ich habe eine Frage:
Ich möchte einen string aus einer Textdatei auslesen, und dem entsprechend handeln.
z.B.
test.txt
Code :1
message 1
Nun sollte eine MessageBox erscheinen...
Code :1
message 0
Nun sollte nichts passieren.
Ich freue mich über eure Hilfe
Gruß Hallasas
-
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
HANDLE hFile; hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "File not found", "ERROR", MB_OK); } if (hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if (dwFileSize != 0xFFFFFFFF) { char buffer1[dwFileSize + 1]; DWORD dwRead; ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL); buffer1[dwFileSize] = '\0'; if(buffer1 == "wasauchimmerdadrinstehensoll") { MessageBox(NULL, "Was auch immer du zu sagen hast", "Nachricht", MB_OK); } else if(buffer1 == "wasauchimmerdasonstdrinstehensoll") { MessageBox(NULL, "Was auch immer du sonst zu sagen hast", "Nachricht", MB_OK); } else { // machen wir gar nichts } } } CloseHandle(hFile);
-
Erstmal vielen Dank für die schnelle Antwort, aber ich habe das noch nicht so richtig verstanden.
Hier willst du die Existenz der Datei nachweisen:
Code cpp:1 2 3 4 5 6 7 8 9
HANDLE hFile; hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "File not found", "ERROR", MB_OK); } if (hFile != INVALID_HANDLE_VALUE) {
Hier wirst du wahrscheinlich nach der Größe der Datei schauen:
Code cpp:1 2 3 4
DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if (dwFileSize != 0xFFFFFFFF) {
Und nun liest du sie ein:
Code cpp:1 2 3 4
char buffer1[dwFileSize + 1]; DWORD dwRead; ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL); buffer1[dwFileSize] = '\0';
Aber wie soll nun die "Test.txt" aussehen?
Bisher habe ich nur die MessageBox erhalten, wenn die Datei nicht existiert...
Ich habe auch natürlich das hineingeschrieben:
Code :1
wasauchimmerdadrinstehensoll
Nur wurde keine MessageBox ausgegeben.
Ich würde mich freuen, wenn du mir hilfst.
Gruß Hallasas
-
Wenn was nicht funktioniert, ist es immer ganz hilfreich, sich einfach das Ergebnis ohne Bedingungen anzuschauen
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
HANDLE hFile; hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "File not found", "ERROR", MB_OK); } if (hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if (dwFileSize != 0xFFFFFFFF) { char buffer1[dwFileSize + 1]; DWORD dwRead; ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL); buffer1[dwFileSize] = '\0'; MessageBox(NULL, buffer1, "Inhalt der Datei", MB_OK); } } CloseHandle(hFile);
Das zeigt dir genau an, was aus der Datei gelesen wurde, und du kannst danach im Umkehrschluss deine if abfragen machen
Einzige Stolperfalle ist es, wenn am Ende der Datei noch eine Leerstelle oder Zeilenschaltung steht, aber auch das kann man prüfen ohne überhaupt in die Datei schauen zu müssen
Mal angenommen in der Datei soll stehen "Dies ist ein Test"
Code :1 2 3 4 5 6 7 8 9 10 11 12
char buffer2 [18] = "Dies ist ein Test\0"; if (buffer1 != buffer2) { MessageBox(NULL, "Inhalt ist nicht gleich, "ERROR", MB_OK); } if (strlen(buffer1) != strlen(buffer2)) { MessageBox(NULL, "Länge ist nicht gleich, "ERROR", MB_OK); }
-
Ein Fehler den viele machen ist auch der Gültigkeitsbereich einer Variable
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
HANDLE hFile; hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "File not found", "ERROR", MB_OK); } if (hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if (dwFileSize != 0xFFFFFFFF) { char buffer1[dwFileSize + 1]; // hier wird buffer 1 definiert DWORD dwRead; ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL); // hier wird buffer1 gefüllt buffer1[dwFileSize] = '\0'; MessageBox(NULL, buffer1, "Inhalt der Datei", MB_OK); // hier wird der Inhalt ausgegeben } // an dieser Stelle existiert buffer1 bereits nicht mehr } CloseHandle(hFile); // an dieser Stelle existiert von der gesamten Information aus der Datei gar nichts mehr, kein Inhalt, kein Dateiname, kein filesize
-
Das funktioniert zwar, doch wollte ich nicht den Inhalt der Datei ausgeben, sondern je nach Inhalt der Datei handeln.
Bei der Variable "message" geht es um den Wert, der nach der Variable folgt...
Dies währe in meinem Fall eine "1" oder eine "0".
z.B.
Code :1
meinevariable 1
Ich hoffe, du kannst mir helfen.
Gruß Hallasas
-
Also zuerstmal kannst du in dem Fall den Inhalt der Datei auf den Wert der Variablen selbst beschränken, also steht in der Datei nur noch 0 oder 1, ohne Leerstellen, ohne Zeilenumbruch ohne sonstwas
Die Ausgabe der Datei dient nur zur Überprüfung, weil du gesagt hast es geht nicht
Wenn du schreibst:
if(buffer1 == "meinevariable 1")
{
MessageBox(irgendwas);
}
und es erscheint keine Messagebox, trotzdem in der Datei "meinevariable 1" steht, dann kann es ausschliesslich daran liegen, dass der Inhalt der Datei trotzdem nicht mit der Abfrage übereinstimmt, sprich es steht ausserdem noch was anderes drin, z.B. eine Leerstelle oder ein Zeilenumbruch, also lässt du dir den Inhalt der Datei anzeigen, um zu überprüfen, wo da der Unterschied ist und hast du den Unterschied mal gefunden kannst du es berichtigen
-
Ich muss mich entschuldigen, es war ein syntaktischer Fehler meinerseits...
Nur funktioniert dies bei mir nicht:
Ich musste die Größe von "buffer2" um eins erhögen, da ich sonst den Fehler:Code cpp:1 2 3 4 5 6 7 8 9 10
char buffer2 [19] = "Dies ist ein Test\0"; if (buffer1 != buffer2) { MessageBox(NULL, "Inhalt ist nicht gleich", "ERROR", MB_OK); } if (strlen(buffer1) != strlen(buffer2)) { MessageBox(NULL, "Länge ist nicht gleich", "ERROR", MB_OK); }
bekomme. Daraus folgt, dass mir jedes Mal die Fehlermeldung "Inhalt ist nicht gleich" wiedergegeben wird.Code :1
error: initializer-string for array of chars is too long
Vieleicht könntest du auch mir auch bei diesem Problem helfen...
Gruß Hallasas
-
Ich persönlich mag die Art und Weise auch nicht, wie C mit strings umgeht, 0 terminiert und vorgegebene Länge, da passiert es mir selbst auch dauernd, dass ich den buffer 1 zu lang oder 1 zu kurz habe
Auch kann ich mir nie merken, wann man die \0 hinten mit angeben muss und wann nicht
Dazu empfehle ich ein Anfänger Tutorial zum Thema C strings
Meine persönliche Lösung ist, ich konvertiere mir alles zu std:string, damit habe ich die ganzen Probleme von Anfang an nicht und kann speziell bei solchen Fehlern wie du gerate hast ohne grossen Aufwand rausfinden wo der Fehler liegt
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
#include <string> HANDLE hFile; hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, "File not found", "ERROR", MB_OK); } if (hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if (dwFileSize != 0xFFFFFFFF) { char buffer1[dwFileSize + 1]; DWORD dwRead; ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL); buffer1[dwFileSize] = '\0'; MessageBox(NULL, buffer1, "Inhalt der Datei", MB_OK); std::string myBuffer(buffer1); std::string myContent = "Dies ist ein Test"; if(myBuffer != myContent) { std::string myResult = "buffer1: " + myBuffer + " ist nicht gleich myContent " + myContent; if(myBuffer.length() > myContent.length()) { myResult = myResult + "\n\nbuffer1 ist länger als myContent"; } else if(myBuffer.length() < myContent.length()) { myResult = myResult + "\n\nbuffer1 ist kürzer als myContent"; } else { myResult = myResult + "\n\nDer Text stimmt nicht überein"; } MessageBox(NULL, myResult.c_str(), "Ergebnis", MB_OK); } if(myBuffer == myContent) { MessageBox(NULL, "Inhalt stimmt überein, "Ergebnis", MB_OK); } } } CloseHandle(hFile);
-
Vielen Dank, Thomasio!
Funktioniert wunderbar.
Ähnliche Themen
-
Programm mit Fernbedienung steuern?
Von engelmarkus im Forum .NET CaféAntworten: 0Letzter Beitrag: 04.11.08, 17:26 -
Programm über das Internet steuern.
Von String im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 17.08.07, 16:19 -
Wie kann man ein anderes Programm steuern
Von Nikon the Third im Forum Coders TalkAntworten: 6Letzter Beitrag: 20.12.05, 13:20 -
Programm zum steuern des CD-ROM-Laufwerks
Von computers im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 06.11.03, 10:22 -
anderes Programm steuern?
Von Piesbruhder im Forum C/C++Antworten: 4Letzter Beitrag: 10.04.02, 14:53





Zitieren
Login






