我想从NERO克碟软件的保存日志中提取我刻写歌曲列表,但是它是日志是二进制的大概如下
.NeroCDAV5.0.0..
................
................
.
.
....G:\Music\PrettyBoy.mp3...
.....PrettyBoy.mp3.....M2M...
后面是是些乱码了,然后又是歌曲列表
请问怎么把歌曲的全部名称读取出来,或者是知道该文件的结构的??
急呀,哪位知道帮帮我啊,先谢谢啦!!

解决方案 »

  1.   

    分析 再 分析 用Debug 或 一些可以看十六进制码的软件如UtraEdit之类 分析下应可以找出文件结构
      

  2.   

    参考这个代码,自己分析:
    http://sf.gds.tuwien.ac.at/n/nr/nragen/nragen.cpp
      

  3.   

    我是用UtraEdit看的,但那个不很会用也很难找出它的结构
      

  4.   

    不用分析文件结构啦~~~~~
    label G001;
    var
      fm : tfilestream;
      c  : char;
      s : string;i:integer;
    begin
      fm ;= Tfilestream.create( 'xxx.nfo', fmopenread);
      G001:
      if fm.position + 2 > fm.size then exit; 
      fm.read( c, 1 );
      while c <> '\' do
        fm.read(c,1);
      fm.position := fm.position -2;// "x:\"
      fm.read( c,1);  i := 1;s := inttostr(i);
      
      while Byte(c) in [$30..$39, $61..$7a, $41..$5a,$5c] do
      begin
        s[i] := c; inc(i);   fm.read( c,1);
      end;
      //得到了一个文件名,下面继续.......
      listbox1.items.add(s);
      goto G001;呵呵,GOTO,久违了~~~~~~~`
      

  5.   

    while c in ['0'..'9', 'A'..'Z', 'a'..'z','\'] do
      

  6.   

    to flyinwuhan(制怒·三思而后行),你给的方法行得能,但是如果是汉字应该怎么判断呢?
    谢谢!
      

  7.   

    汉字~~~~~没有考虑汉字的问题~~~~~晕~~~~~~~`不过可以这么判断:每一首歌名的开头必然是'X:\';结尾必然是'.mp3',这样就不会有问题了
    自己逻辑一下~~~~~`
      

  8.   

    sExt :string;i := 1;
    s := '1';sExt = '.xxx';  
    while sExt<>'.mp3' do
      begin
        sExt[i] := c; s[j] := c; inc(i);inc(j);   fm.read( c,1);if i>3 then i:=1;
      end;  goto G001;
      

  9.   

    sExt :string;有点错误~
    i := 1;
    s := '1';sExt = '.xxx';  
    while sExt<>'.mp3' do
      begin
        s[i] := c; inc(i);
        fm.read( c,1);
        if i>5 then sExt:=copy(s,length(s)-5,4);
      end;  goto G001;
      

  10.   

    谢谢 flyinwuhan(制怒·三思而后行) 您给的思路,问题已经解决了。我开始对文件流不熟,晕啊,要加油~~   不过我还是不怎么赞成用goto,呵呵:)procedure TForm1.FindPathFile(aLogFile:string);
    var
      c,c1:Char;
      fm:TFileStream;
      s,s2:string;
      i:integer;
      bnlFinded:Boolean;
    begin
      fm:=TFileStream.Create(aLogFile,fmOpenRead);
      fm.Read(c,1);
      while fm.Position<fm.Size do
      begin
        //找到的":\"位置,意味着一个文件名的开始
        //首先查找":"符号
        while c<>':' do
        begin
          fm.Read(c,1);
          if fm.Position>=fm.Size then
          begin
            fm.Free;
            Exit;
          end;
        end;
        fm.Read(c1,1);    //找到了":"之后,再读下一个字符是否是"\"字符
        s2:=c+c1;
        if s2<>':\' then
          Continue;    //找到了文件名的开始标志之后,回溯3个字符,即到了":"前面
        fm.Position:=fm.Position-3;
        fm.Read(c,1);
        s:='';
        bnlFinded:=False;
        repeat
          s:=s+c;
          fm.Read(c,1);
          if c='.' then
          begin
            s2:='';
            for i:=1 to 4 do
            begin
              s2:=s2+c;
              fm.Read(c,1);
            end;
            if s2='.mp3' then
            begin
              s:=s+s2;
              if lst1.Items.IndexOf(s)<0 then   //没有重复的返回-1
                lst1.Items.Add(s);
              bnlFinded:=True;
            end
            else
              s:=s+s2;
          end;
        until bnlFinded;
      end;
      fm.Free;
    end;
      

  11.   

    先结了这个帖再说.
    现在只解决了.nra格式的文件,但是我看了一下.nr3(也是NERO的保存日志,二进制文件)里面跟本就没有类似“X:\”的字符串,晕啊。  看来又有新问题啦,看来只分析文件结构啦,呵呵~~~