delphi WriteFile

发布时间 2023-03-26 11:05:53作者: Tag

WriteFile函数的第二个参数是一个指向要写入文件的数据的指针。

因此,您可以使用任何指针类型作为第二个参数,包括指向动态数组的指针。

但是,您需要确保指针指向的内存块具有足够的空间来容纳要写入文件的数据。

如果您使用动态数组作为指针,您需要使用SetLength函数为数组分配足够的内存,并使用@运算符获取指向数组第一个元素的指针。

例如,以下代码将一个动态数组写入文件:

 

var
  F: THandle;
  A: array of Byte;
  P: Pointer;
  BytesWritten: DWORD;
begin
  F := CreateFile('test.bin', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  try
    SetLength(A, 5);
    A[0] := 72; // 'H'
    A[1] := 101; // 'e'
    A[2] := 108; // 'l'
    A[3] := 108; // 'l'
    A[4] := 111; // 'o'
    P := @A[0];
    WriteFile(F, P^, Length(A), BytesWritten, nil);
  finally
    CloseHandle(F);
  end;
end;

如果第二个参数使用的是静态的数组,则直接写静态数组变量就可以了。

个人理解:动态数组 相当于是动态的内存。要用一个指针来执行其地址,不然写入的数据跟预期的会不一样