跪求读取MP3文件的信息的代码

帅比紫韦浪浪 2016-07-23 09:40:48
跪求一份读取MP3文件最后128字节的代码
...全文
560 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-07-26
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <share.h>
#include <conio.h>
int fh;
int c,r;
__int64 offset,offset1,i64,n64,l64,r64;
char ln[16000+1];
int main(int argc,char **argv) {
    if (argc<2) {
        fprintf(stderr,"Usage:%s filename.txt [10]\nto reverse lines of file [default the last 10 lines,-1 for all lines].\n",argv[0]);
        return 1;
    }
    if (argc==2) n64=10i64;
    if (argc>2) sscanf(argv[2],"%I64d",&n64);
    fh=_sopen(argv[1],_O_BINARY|_O_RDONLY|_O_RANDOM,_SH_DENYNO);
    if (-1==fh) {
        fprintf(stderr,"Can not _sopen file %s!\n",argv[1]);
        return 2;
    }
    l64=_filelengthi64(fh);if (l64==0i64) {_close(fh);return 0;}
    offset=l64;
    offset1=_lseeki64(fh,-1i64,SEEK_END);
    if (offset1==-1i64) {_close(fh);return 3;}
    i64=0i64;
    while (1) {
        if (_read(fh,&c,1)<1) break;//
        if (('\n'==c && offset1<l64-1i64) || offset1==0i64) {
            if (offset1!=0i64) offset1++;
            if (_lseeki64(fh,offset1,SEEK_SET)==-1i64) break;//
            r64=offset-offset1;
            if (r64<=16000i64) {
                r=_read(fh,ln,(unsigned int)r64);
                if (r<=0) break;//
            } else {
                r=16000;
                while (1) {
                    if (r64>(__int64)r) {
                        r64-=(__int64)r;
                        if (1i64==r64 || 2i64==r64) {
                            r=8000;
                            r64+=(__int64)r;
                        }
                    } else {
                        r=(int)r64;
                        r64=0i64;
                    }
                    r=_read(fh,ln,r);
                    if (r<=0) break;//
                    if (0i64==r64) break;//
                    ln[r]=0;
                    printf("%s",ln);
                    r=16000;
                }
                if (r<=0) break;//
            }
            ln[r]=0;
            if (r>=2 && ln[r-1]=='\n' && ln[r-2]=='\r') {ln[r-2]='\n';ln[r-1]=0;r--;}//避免输出重定向到文件时行尾多出'\r'
            if (i64==0I64) {
                if ('\n'!=ln[r-1]) printf("%s\n",ln);
                else               printf("%s",ln);
            } else {
                printf("%s",ln);
            }
            i64++;
            if ((i64%10000)==0) cprintf("\r%I64d/%I64d",offset1,l64);
            if (n64>0i64 && i64>=n64) break;//
            offset=offset1;
            _lseeki64(fh,offset1-2i64,SEEK_SET);
            offset1-=2i64;
        } else {
            _lseeki64(fh,-2i64,SEEK_CUR);
            offset1--;
        }
    }
    _close(fh);
    return 0;
}
060 2016-07-26
  • 打赏
  • 举报
回复
不要动不动就是“跪求”,自己要活的有尊严一些。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧