Einzelnen Beitrag anzeigen

Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#11

Re: Probleme mit BlockRead / BlockWrite

  Alt 19. Dez 2009, 01:49
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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat