如何在 Delphi 中的 Android 设备上打开和阅读“/proc/cpuinfo”

How to open and read "/proc/cpuinfo" on Android device in Delphi

谁能告诉我如何打开和阅读 "/proc/cpuinfo " 在 Android 设备上 Delphi?

原代码:

var
  i: integer;
  FS: TFileStream;
  LBuffer: TBytes;
begin
  if FileExists('/proc/cpuinfo') then
    begin
      FS:= TFileStream.Create('/proc/cpuinfo', fmOpenRead);
      try
        SetLength(LBuffer, FS.Size);
        FS.ReadBuffer(Pointer(LBuffer)^, Length(LBuffer));
        for i:= 0 to Length(LBuffer) - 1 do
          Memo1.Lines.Add(LBuffer[i]);
      finally
        FS.Free;
      end;

    end;
end;

问题是 FS 的大小是 -1,因此不是读...

如果文件流报告的大小为 -1,那么您将需要更加努力地阅读内容。这是一个虚拟文件,因此它的行为并不完全像一个文件并报告其大小也就不足为奇了。我希望它也不支持寻求。

试试这个:

var
  Buffer: array [0..1023] of Byte;
  BytesStream: TBytesStream;
  BytesRead: Integer;
....
BytesStream := TBytesStream.Create;
repeat
  BytesRead := FS.Read(Buffer, SizeOf(Buffer));
  BytesStream.Write(Buffer, BytesRead);
until BytesRead < SizeOf(Buffer);

// now the contents can be read from BytesStream.Bytes
// convert to a string using TEncoding

简单地说,就是让您阅读文件,直到没有更多内容可读为止。

答案很简单(已测试):

var
  FS: TFileStream;
  ch: Char;
  RawLine: System.UnicodeString;
begin
  if FileExists('/proc/cpuinfo') then
    begin
      try
        RawLine:= '';
        ch := #0;
        FS:= TFileStream.Create('/proc/cpuinfo', fmOpenRead);
        while (FS.Read( ch, 1) = 1) and (ch <> #13) do
          begin
            RawLine := RawLine + ch
          end;
        Memo1.Lines.Append(RawLine);
      finally
        FS.Free;
      end;
    end;
end;

享受测试;)