WriteFile



  • Hallo ,

    ich öffne ein Logfile, und schreibe returnierte Strings alles wunderber.

    Nach n Zeilen setze ich den Filepointer wieder auf Dateianfang, und
    mache dann einfach weiter. Was ich erhalte ist zu 90% eine zerstückelte Datei.

    Ich habe bereits den Schreibcashe abgestellt, jedoch ohne Wirkung auch ein Flush
    vor jedem Write hilft nicht:

    (so wird es geöffnet)
    
    m_hFile = ::CreateFileA( Path,
    GENERIC_READ|GENERIC_WRITE,
    0,//FILE_SHARE_READ|FILE_SHARE_WRITE,
    LPSECURITY_ATTRIBUTES)NULL,
    OPEN_ALWAYS,
    FILE_FLAG_WRITE_THROUGH,
    (HANDLE)NULL);
    
    ::SetFilePointer(m_hFile,0,0,FILE_END);
    
    (so schreibe ich den static string)
    DWORD nw;::WriteFile(m_hFile,fStr.GetBuffer(),fStr.GetLength(),&nw,0);
    
    (ab und zu setze ich den Pointer auf anfang)
    ::SetFilePointer(m_hFile,0,0,FILE_BEGIN);
    

    Nach dem setzen des Zeigers auf den Start , habe ich oft müll in meinem File.

    Danke für Hinweise,
    gruß
    Karsten



  • Soll die Datei wieder bei der Größe "0" anfangen, wenn Du wieder von Vorne anfängst, oder soll der Inhalt der ganzen Einträge beibehalten werden?



  • ja lach, ist ja logisch wenn die Zeilen unterschiedliche längen haben
    herjee auf was man alles kommt ^^



  • Du musst einfach nur noch nach dem "SetFilePointer(0, BEGIN)" ein "SetEndOfFile" aufrufen 😉
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa365531


Anmelden zum Antworten