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