Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit BlockRead / BlockWrite (https://www.delphipraxis.net/144889-probleme-mit-blockread-blockwrite.html)

Astat 19. Dez 2009 01:49

Re: Probleme mit BlockRead / BlockWrite
 
Hallo JBJHJM.

Wie Luckie schon geschrieben hat, ist Blockread hier nicht unbedingt die optimale Lösung.

Anbei eine mögliche API - Implementierung.

Delphi-Quellcode:
var
  hFile     : LongWord;
  ptrBuffer : pointer = nil;
  cbLen     : LongWord = 64;
  cbRead    : LongWord;
  szFilePath : PAnsiChar = 'd:\test.txt';
  szData    : PAnsiChar =
    'E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855';
begin
  //-- Schreiben

  GetMem(ptrBuffer, cbLen);
  move(szData[0], ptrBuffer^, cbLen);

  hFile := CreateFile(szFilePath, GENERIC_READ or GENERIC_WRITE,
    0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

  if hFile = INVALID_HANDLE_VALUE then RaiseLastWin32Error;

  if SetFilePointer(hFile, 0, nil, 0) = $FFFFFFFF then RaiseLastWin32Error;

  if not WriteFile(hFile, ptrBuffer^, cbLen, cbRead, nil) then
    RaiseLastWin32Error;

  if not FlushFileBuffers(hFile) then RaiseLastWin32Error;

  if cbLen <> cbRead then RaiseLastWin32Error;

  if not CloseHandle(hFile) then RaiseLastWin32Error;

  FreeMem(ptrBuffer, cbLen);


  //-- Lesen

  hFile := CreateFile(szFilePath, GENERIC_READ or GENERIC_WRITE,
    0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

  if hFile = INVALID_HANDLE_VALUE then RaiseLastWin32Error;

  if SetFilePointer(hFile, 0, nil, 0) = $FFFFFFFF then RaiseLastWin32Error;

  GetMem(ptrBuffer, cbLen);

  if not ReadFile(hFile, ptrBuffer^, cbLen, cbRead, nil) then
    RaiseLastWin32Error;

  if cbLen <> cbRead then RaiseLastWin32Error;

  if not CloseHandle(hFile) then RaiseLastWin32Error;

  Showmessage(PChar(ptrBuffer));

  FreeMem(ptrBuffer, cbLen);
end.

lg.Astat

JBJHJM 19. Dez 2009 12:03

Re: Probleme mit BlockRead / BlockWrite
 
Danke Astat, ich werde es mir mal angucken!

Aber mich interessiert trotzdem - auch wenns nicht der praktischste Weg ist, warum ich mit BlockRead/BlockWrite nicht anständig Strings verarbeiten kann... :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz