Delphi下用WriteFile和ReadFile怎样读写String类型的数据,谢绝理论,要例子。

解决方案 »

  1.   

    // Read
    procedure TForm1.bRClick(Sender: TObject);
    var
      F2R: THandle;
      data: array[0..255] of Char;
      len: Cardinal;
    begin
      F2R:= CreateFile(PChar('c:\rw.txt'),
                       GENERIC_READ,
                       0,
                       nil,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL,
                       0);
      ReadFile(F2R, data, 256, len, nil);
      ShowMessage(data);
    end;// Write
    procedure TForm1.bWClick(Sender: TObject);
    var
      F2W: THandle;
      len: Cardinal;
      data: array[0..255] of Char;
    begin
      data:= '1234567';
      F2W:= CreateFile(PChar('c:\rw.txt'),
                       GENERIC_WRITE,
                       0,
                       nil,
                       CREATE_ALWAYS,
                       FILE_ATTRIBUTE_NORMAL,
                       0);
      WriteFile(F2W, data, 256, len, nil);
      CloseHandle(F2W);
    //
    end;
      

  2.   

    function StringsToPCharArray(var Dest: PPSTR; const Source: TStrings): PPSTR;
    var
      i:    Integer;
      s:    string;
      list: array of PChar;
    begin                 
      Dest  := AllocMem((Source.Count + 1) * SizeOf(PChar)); // one more for an extra nil pointer
      SetLength(List, Source.Count + 1);
      for i := 0 to Source.Count - 1 do
      begin
        s := Source[i];
        list[i] := StrAlloc(Length(s) + 1);
        StrPCopy(list[i], s);
      end;
      list[Source.Count] := nil;
      Move(list[0], Dest^, (Source.Count + 1) * SizeOf(PChar));
      Result := Dest;
    end;procedure PCharArrayToStrings(const Dest: TStrings; const Source: PPSTR; const Count: Integer);
    var
      i:    Integer;
      list: array of PChar;
    begin
      SetLength(list, Count);
      Move(Source^, list[0], Count * SizeOf(PChar));
      Dest.Clear;
      for i := 0 to Count - 1 do
        Dest.Add(List[i]);
    end;procedure FreePCharArray(var Dest: PPSTR; const Count: Integer);
    var
      i:    Integer;
      list: array of PChar;
    begin
      SetLength(list, Count);
      Move(Dest^, list[0], Count * SizeOf(PChar));
      for i := 0 to Count - 1 do
        StrDispose(list[i]);
      FreeMem(Dest, (Count + 1) * SizeOf(PChar));
      Dest := nil;
    end;