Dateitechnik



  • Hallo zusammen,

    ich versuche eine Datei zu öffnen und am Ende bestimmte Informationen hinzuzufügen. Soweit funktioniert alles.
    Da sich in der letzten Zeile ein Zeilenzähler befindet, muss ich diese Zeile auslesen.
    Meine Datei sieht z.B. so aus:

    1;12345;XYZ;ABC;DATUM;UHRZEIT

    Wie man sieht muss ich nach ";" suchen lassen, was unter MFC auch funzt. Dort aber benutze ich nicht CreateFile sonder CFile.

    Hier mein jetziger Code:

    //Filehandling - Speichervorgang in Datei
    //BESTAND.TXT
    HANDLE hFile = CreateFile (TEXT("BESTAND.TXT"),
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ,
    NULL,
    OPEN_ALWAYS,
    0,
    NULL);

    if (hFile == INVALID_HANDLE_VALUE)
    AfxMessageBox(_T("Konnte Datei nicht erstellen!"));

    //Zähler bei Erfolg um 1 erhöhen
    m_count++;
    _itoa(m_count,Counter,10);

    //Speichervorgang
    dwPos=SetFilePointer(hFile,0,NULL,FILE_END);
    // WriteFile(hFile,buff,dwBytesRead,&dwBytesWritten,NULL);
    WriteFile(hFile,Counter,strlen(Counter),&dwFileLen,NULL);
    WriteFile(hFile,semik,1,&dwFileLen,NULL);
    WriteFile(hFile,temp_PERSNR,strlen,temp_PERSNR),&dwFileLen,NULL);
    WriteFile(hFile,semik,1,&dwFileLen,NULL);
    WriteFile(hFile,temp_INVNR,strlen(temp_INVNR),&dwFileLen,NULL);
    WriteFile(hFile,semik,1,&dwFileLen,NULL);
    WriteFile(hFile,temp_GSN,strlen(temp_GSN),&dwFileLen,NULL);
    WriteFile(hFile,semik,1,&dwFileLen,NULL);
    WriteFile(hFile,temp_KSN,strlen(temp_KSN),&dwFileLen,NULL);
    WriteFile(hFile,semik,1,&dwFileLen,NULL);
    WriteFile(hFile,temp_szDate,strlen(temp_szDate),&dwFileLen,NULL);
    WriteFile(hFile,semik,1,&dwFileLen,NULL);
    WriteFile(hFile,temp_szTime,strlen(temp_szTime),&dwFileLen,NULL);
    WriteFile(hFile,"\x0D\x0A",2,&dwFileLen,NULL);

    Bin für jede Hilfe dankbar!!!
    TANHX



  • Bitte editiere deinen Beitrag nochmal und baue CodeTags ein. Danke.



  • eine möglichkeit wäre die komplette datei in einen buffer zu lesen und dann zu suchen, ändern etc.

    HANDLE  hFile;
        DWORD   dwFileSize;
        DWORD   dwBytesRead;
        char    *lpBufPtr;
    
        if((hFile = CreateFile(
                SAVEFILE,
                GENERIC_READ,
                FILE_SHARE_READ,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                (HANDLE)NULL)) == (HANDLE)-1)
            return FALSE;
    
        dwFileSize = GetFileSize(hFile, NULL);
        if(dwFileSize == 0xFFFFFFFF)
            return FALSE;
    
        lpBufPtr = (char *)LocalAlloc(GMEM_FIXED, dwFileSize);
    
        if(lpBufPtr == NULL)
        {
            CloseHandle(hFile);
            return FALSE;
        }
    
        ReadFile(hFile,(LPVOID)lpBufPtr, dwFileSize, &dwBytesRead, NULL);
    
        if(dwBytesRead == 0)
            return FALSE;
    
        CloseHandle(hFile);
    
    // hier suchen, lesen, ändern, wieder zurückschreiben
    
        LocalFree(lpBufPtr);
        return TRUE;
    

    hier noch ein auszug aus der msdn zum manipulieren des buffers http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_string_manipulation.asp


Anmelden zum Antworten