var
  iFileHandle: Integer;
  iBytesRead: Integer;
  Buffer: PChar;
  i: Integer;
begin
  if OpenDialog1.Execute then
  begin
    try
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      FileSeek(iFileHandle,128,0);
      Buffer := PChar(AllocMem(128 + 1));
      iBytesRead := FileRead(iFileHandle, Buffer, 128);
      FileClose(iFileHandle);
      for i := 0 to iBytesRead-1 do
      begin
        StringGrid1.RowCount := StringGrid1.RowCount + 1;
        StringGrid1.Cells[1,i+1] := Buffer[i];
      end;    finally
      FreeMem(Buffer);
    end;
  end;
end;end.

解决方案 »

  1.   

    本来原理很简单,就是读取MP3文件的最后面的128个字节的数据,写出来就可以了,无奈本人的DELPHI基础实在是差,基本的读写操作都不会看了半天的帮助文件才懂了一点点,可是编的东西还是用不了。希望那位老大给的关怀。
      

  2.   

    太麻烦了,直接申明一个File类型,然后进行操作,—————————————————————————————————
    ┏━★━━◆━━★━┓ 
    ♂欢|◢CSDN◣|使♂        ▲自由保存帖子,浏览,关注检测
    ┃迎|◥论坛助手◤|用┃        ▲完善的CSDN客户端工具
    ┗━☆━━◇━━━☆┛       ▲自动添加签名......让你更快,更爽,更方便地上CSDN...
    http://www.csdn.net/expert/topic/573/573604.xml
    http://www.chinaok.net/csdn/csdn.zip
      

  3.   

    读取最后128字节?
    这句FileSeek(iFileHandle,128,0);是定位在首128字节
    定位在最后128字节应该这样写:FileSeek(iFileHandle,128,2);
      

  4.   

    给你一个单元,试试看,是读写“mp3 ID3标签信息”的:严黎斌
    unit ID3Kernel;interfacetype
      Tid3v1= record
        Tag: array[0..2] of char;      //00..02 , ='TAG'
        Title:array[0..$1d] of char;  //03..20
        Artist:array[0..$1d] of char;  //21..3e
        Album:array[0..$1d] of char;  //3f..5c
        Year:array[0..3] of char;      //5d..60
        Comment:array[0..$1c] of char; //61..7d
        Track:byte;                    //7e
        Genre:byte;                    //7f
      end;function ReadID3v1(strFile:string;var pid3v1:Tid3v1):integer;
    function WriteID3v1(strFile:string;var pid3v1:Tid3v1):integer;
    function DeleteID3v1(strFile:string):integer;implementationfunction ReadID3v1(strFile:string;var pid3v1:Tid3v1):integer;
    var
      f1:file of byte;
      bytAll: array [0..$7f] of byte;
      i: integer;
    begin
      result:=1;
      if strFile='' then exit;
      AssignFile(f1,strFile);
      FileMode:=0;
      Reset(f1);
      if FileSize(f1)<=$80 then exit;
      Seek(f1, FileSize(f1)-$80);
      for i:=0 to $7f do Read(f1,bytAll[i]);
      if (bytAll[0]<>ord('T')) and (bytAll[1]<>ord('A'))
        and (bytAll[2]<>ord('G')) then exit; // no 'TAG' found
      Move(bytAll,pid3v1,$80);
      CloseFile(f1);
      result:=0;
    end;function WriteID3v1(strFile:string;var pid3v1:Tid3v1):integer;
    var
      f1:file of byte;
      bytAll: array [0..$7f] of byte;
      i: integer;
    begin
      result:=1;
      AssignFile(f1,strFile);
      FileMode:=2;
      Reset(f1);
      if FileSize(f1)<=$80 then exit;
      Seek(f1, FileSize(f1)-$80);
      for i:=0 to $2 do Read(f1,bytAll[i]); // test if 'TAG' exists
      if (bytAll[0]=ord('T')) and (bytAll[1]=ord('A'))
            and (bytAll[2]=ord('G'))
        then Seek(f1,FileSize(f1)-$80)
        else Seek(f1,FileSize(f1));
      Move(pid3v1,bytAll,$80);
      for i:=0 to $7f do Write(f1,bytAll[i]);
      CloseFile(f1);
      result:=0;
    end;function DeleteID3v1(strFile:string):integer;
    var
      f1:file of byte;
      bytAll: array [0..$7f] of byte;
      i: integer;
    begin
      Result:=1;
      AssignFile(f1,strFile);
      FileMode:=2;
      Reset(f1);
      if FileSize(f1)<=$80 then exit;
      Seek(f1, FileSize(f1)-$80);
      for i:=0 to $2 do Read(f1,bytAll[i]); // test if 'TAG' exists
      if (bytAll[0]=ord('T')) and (bytAll[1]=ord('A'))
            and (bytAll[2]=ord('G'))
        then begin
          Seek(f1,FileSize(f1)-$80);
          Truncate(f1)
        end;
      CloseFile(f1);
      Result:=0;
    end;end.