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

时间:2015-06-04 14:39:13

标签: android delphi cpu firemonkey

有人可以告诉我如何打开和阅读" / 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,因此不是读取...

2 个答案:

答案 0 :(得分: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

只需要阅读文件,直到没有其他内容可读。

答案 1 :(得分:0)

答案很简单(经过测试):

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;

享受测试;)