Datei speichern - ungewuenschtes Ende
-
Hi,
ich habe ein kleines problem. wenn ich eine textdatei oeffne und speichere, kann es passieren, dass das allerletzte zeichen in der textdatei ein "ganz komisches ist" - ein rechteck, also ein steuerzeichen. wie kann ich das vermeiden?
hier ist der code zum laden einer datei:bool open_file( char* filename_1 ) { ShowWindow( hEdit, SW_SHOW ); // mein Editfenster free(buffer); FILE *fz; int iFileSize; fz = fopen( filename_1, "rb"); if(fz != NULL) { fseek(fz, 0, SEEK_END); iFileSize = ftell(fz); buffer = (char*)malloc(iFileSize); fseek(fz, 0, SEEK_SET); fread(buffer, 1, iFileSize, fz); fclose(fz); } if( ( SendMessage( hEdit, WM_SETTEXT, NULL, (LPARAM)buffer ) ) == true ) { return true; } else { return false; } }so, dann zum speichern
bool save_file( char* filename_2 ) { FILE *fz; int iLength; iLength = GetWindowTextLength(hEdit); free(buffer); buffer = (char*)malloc(iLength); GetWindowText(hEdit, buffer, iLength+1); fz = fopen( filename_2, "wb"); fwrite(buffer, 1, iLength, fz); fclose(fz); free(buffer); bSaved = true; return true; }ach ja, noch etwas. wie kann ich vermeiden, dass .exe dateien usw geoeffnet werden? der folgende code aus open_file() haut ja nicht hin:
if( ( SendMessage( hEdit, WM_SETTEXT, NULL, (LPARAM)buffer ) ) == true ) { return true; } else { return false; }dnake
gruesse
-
Wieso gibst du bei GetWindowText iLength+1 an?
-
So das ganze mal nen Bissel ordentlicher
Öhm... willst du nur bestimmte Filetypen zulassen oder was ?! Dann guck doch ob die letzten chars deines Pointers entsprechent sind...bool open_file(LPCSTR lpszFilename) { ShowWindow(hEdit, SW_SHOW); free(buffer); FILE* pFile = 0; int nFileSize = 0; pFile = fopen(lpszFilename, "rb"); if(!pFile) return false; fseek(pFile, 0, SEEK_END); nFileSize = ftell(pFile); buffer = (char*)malloc(nFileSize); fseek(pFile, 0, SEEK_SET); fread(buffer, 1, nFileSize, pFile); fclose(pFile); if((!SendMessage(hEdit, WM_SETTEXT, NULL, (LPARAM)buffer))) return false; return true; }
-
danke, das meiste klappt schon mal. nur:
wenn ich bei GetWindowText( length+1 ) die eins nicht addiere, wird das letzte zeichen, falls es kein return ist, nicht geoeffnet. mit 1 klappts.
wenn ich die textdatei aber mit einem leerzeichen beenden lasse, haut der mir ein sonderzeichen rein. wie kann ich das vermweiden? einfach alle returns am dateiende loeschen?
danke