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


Anmelden zum Antworten