Seltsames Verhalten - Textdateien schreiben / lesen...
-
In meinem Programm tritt ein - für mich - etwas seltsames Verhalten auf. Ich will den text, der in einem Edit- Childfenster eingegeben wurde in einer Datei speichern, bzw. aus Dateien einlesen. Dazu gebe ich in einem Dialog jeweils den Pfad und Dateinamen ein.
Beim Schreiben lese ich vorher den Text aus dem Edit Fenster mit GetWindowText...) aus (beim Lesen aus der Datei setze ich ihn entsprechend mit SetWindowText(...)).Wenn ich dann aber die Datei schreibe wird direkt hinter dem Text aus dem Edit- Fenster auch noch die eingegebene Pfadangabe in der Datei gespeichert, und ich hab keine Ahnung wieso.
Beispiel : Im Edit-Fenster steht der Text 'Test'. Als zu schreibenede Datei gebe ich im Dialog 'c:\test.txt' ein. In der dann geschriebenen Datei ist dann der Text 'Testc:\test.txt' gespeichert.
Beim Lesen aus einer Datei erscheint im Edit- Fenster der Text bis auf das letze Zeichen.Der Code für den Datei laden Dialog sieht so aus :
BOOL CALLBACK DlgLadenProc(HWND hDlg, UINT msg,WPARAM wParam,LPARAM lParam) { HANDLE hFile; static char filename[] = ""; DWORD filesize; switch(msg) { case WM_COMMAND : { switch(LOWORD(wParam)) { case IDOK : // Hier wird der Pfad und Dateiname in die Variable 'filename' // gelesen (IDC_LADEN_DATEINAME ist der Bezeichner fuer das // Eingabefeld im Dialog. GetWindowText(GetDlgItem(hDlg, IDC_LADEN_DATEINAME), filename, 255); // Öffnen der Datei hFile = CreateFile( (LPCTSTR) filename, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) {/*Fehlerbehandlung*/ } else { DWORD bytesRead = 0; filesize = GetFileSize(hFile, NULL); // char textdaten[] ist eine globale Variable <- mit "" // vorbelegt. ReadFile(hFile, &textdaten, filesize, &bytesRead, NULL); CloseHandle(hFile); // Im Edit- Childfenster sollen die gelesenen Daten // erscheinen SetWindowText(hwndEdit, textdaten); EndDialog(hDlg, 0); } // und so weiter
Der Code für das Datei schreiben sieht ähnlich aus.
[ Dieser Beitrag wurde am 09.06.2003 um 13:43 Uhr von FrodoSix editiert. ]
-
Ich denke, wenn du den Code, in dem geschrieben wird, nicht postest, wird man dir nicht helfen können ...
M.T.
-
Da isser doch..
-
Da fehlt doch irgendwie WriteFile - oder?
M.T.
-
Nö... weil das ist nämlich die Prozedur für das Lesen der Datei... und das ReadFile(...) steht eindeutig da.
Das Problem ist ja nicht, daß nichts aus der datei gelesen wird, sondern daß scheinbar zuviel gelesen wird (siehe Fehlerbeschreibung).
-
Wenn ich dann aber die Datei schreibe wird direkt hinter dem Text aus dem Edit- Fenster auch noch die eingegebene Pfadangabe in der Datei gespeichert, und ich hab keine Ahnung wieso.
D.h. du schreibst mir WriteFile zu viel in die Datei. Das Auslesen ist doch dann nicht das Problem, wenn du nur den Text in der Datei anzeigen willst.
Oder willst du, dass der Pfad mit in der Datei steht? Dann musst du ein Trennzeichen benutzen und nur den Text vor dem Trennzeichen anzeigen bzw. die Länge des Textes mit speichern ...M.T.
-
Ne... also nochmal.
Beispiel : Ich hab im Edit Fenster nur das Wort 'Test' stehen. Und nur das will ich in der Datei speichern.
Zum Speichern gebe ich in einem Dialog den gewünschten Pfad/Dateiname ein, z.B. 'c:\test.txt' (welcher NICHT in der Datei gespeichert werden soll).
Die gescriebene Datei enthält nun aber nicht wie gewünscht nur 'Test', sondern 'Testc:\test.txt'.
-
Schreiben (so funktioniert das!):
char *pcText = NULL; pcText = (char*)malloc(GetWindowTextLength(hEdit)); GetWindowText(..., pcText, ...); WriteFile(hFile, pcText, ...);
Wenn du das so hast, dann passt das ... ansonsten poste mal den gesamten Code.
M.T.
-
Ich probier's mal aus... danke!