Daten Lesen/Schreiben



  • also der title hört sich wohl unkomplizierter an als es ist (oder doch nich ?)

    Naja der auftrag ist:

    Öffne Datei (evt. mehere 100MB)
    ersezte byte 10 (0x0A) durch ;

    öffnen,lesen (mit 1024 buffer),abfragen nach byte 10
    geht alles

    CFile xFile;
        xFile.Open("C:\\text.txt",CFile::modeReadWrite ,NULL);
        long x = 0;
        long y = xFile.GetLength(); 
        BYTE pbuf[1024];
    
        while (x < y)
        {
            x = x + (long) xFile.Read(pbuf,1024);
            for (int i = 0;i <= 1024;i++)
            {
                if(pbuf[i] == 0x0A)
                {
                    //HIER GEHTs WEITER
                }
            }
        }
    
        xFile.Close();
    

    Ok aber das ersetzen is noch nich ganz...
    wie kann man mit CFile::Write()
    an die richtigen stellen schreiben bzw. hat jemand dafür noch ne bessere lösung ?



  • Hi Timmy!

    Würde vorschlagen du schreibst jede modifizierte Zeile in ein 2. File und nachdem alles gemacht ist, dann 1. File löschen und 2. File umbenennen (?)

    lg,
    Captain.



  • CFile xFile;
    if( xFile.Open("C:\\text.txt",CFile::modeReadWrite ,NULL))
    {
      HANDLE hMap = CreateFileMapping( xFile, NULL, PAGE_READWRITE, 0, 0, NULL);
      if( hMap != INVALID_HANDLE_VALUE)
      {
        LBYTE pData = (LPBYTE)MapViewOfFile( hMap, FILE_MAP_WRITE, 0, 0, 0);
        LPBYTE pEnd=pData+(ULONG)xFile.GetLength();
        for( LPBYTE pStart=pData; pStart<pEnd; pStart++)
          if( *pStart == 0x10)  *pStart = ';';
        UnmapViewOfFile( pData);
        CloseHandle( hMap);
      }
    }
    

Anmelden zum Antworten