问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言有关文件操作

发布网友 发布时间:2022-05-03 01:09

我来回答

3个回答

热心网友 时间:2022-06-28 22:13

最BS楼上__abc这种直接拿到词霸里翻译,看都不看结果就贴上来的人。

==========================

代码部分我在完善中,已经可以顺利读取ID3信息。
基本完工后我会贴到空间里,随后转贴过来。

P.S.15分有点少……

==========================

完成:http://hi.baidu.com/crazycola/blog/item/45e816fd9d7e2b1509244d34.html

完整代码:

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

#define MAXFILENAME 256

typedef struct tag_id3v1 {
char title[31];
char artist[31];
char album[31];
char year[5];
char comment[31];
char genre;
} TAG_ID3V1;

char* genre_id3v1[] = {
"Blues", "Classic Rock", "Country", "Dance", "Disco", // 00-04 // 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
"Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", // 05-09
"New Age", "Oldies", "Other", "Pop", "R&B", // 10-14
"Rap", "Reggae", "Rock", "Techno", "Instrial", // 15-19
"Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", // 20-24
"Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", // 25-29
"Fusion", "Trance", "Classical", "Instrumental", "Acid", // 30-34
"House", "Game", "Sound Clip", "Gospel", "Noise", // 35-39
"AlternRock", "Bass", "Soul", "Punk", "Space", // 40-44
"Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", // 45-49
"Darkwave", "Techno-Instrial", "Electronic", "Pop-Folk", "Eurodance", // 50-54 // 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
"Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", // 55-59
"Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", // 60-64
"Cabaret", "New Wave", "Psychadelic", "Rave", "Showtunes", // 65-69
"Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", // 70-74
"Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock" // 75-79
};// 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创

void copyinfo( FILE* fp, char* target, int size )
{
char* strtmp = NULL;
int num_read = 0;
strtmp = (char*)malloc((size+1)*sizeof(char));
num_read = fread( strtmp, sizeof(char), size, fp );
strtmp[num_read]='\0';
strcpy( target, strtmp );
free(strtmp); strtmp=NULL;
}

void getID3v1( FILE* fp, TAG_ID3V1* tag )
{
// make sure fp and tag are both correct pointers
copyinfo( fp, tag->title, 30 );
copyinfo( fp, tag->artist, 30 );
copyinfo( fp, tag->album, 30 );
copyinfo( fp, tag->year, 4 );
copyinfo( fp, tag->comment, 30 );
tag->genre = fgetc(fp);
}

void main()
{
char* fname = NULL;
char* strtmp = NULL;
char ext[5] = ".mp3";
FILE* fp = NULL;
// 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
int i, ch, c_yesno = 0;
int num_read = 0;

while( c_yesno != 27 )
{
fname = (char*)malloc(MAXFILENAME*sizeof(char));
do {
system("cls");
printf( "Enter filename: " );
for( i = 0; (i < MAXFILENAME) && ((ch = getchar()) != EOF)
&& (ch != '\n'); i++ )
fname[i] = (char)ch;
fname[i] = '\0';
} while(fname[0]=='\0');
// 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
if( strlen(fname)<5 )
{
printf("Error: filename too short.\n");
free(fname); fname=NULL;
printf("\nPress any key to re-enter... ");
getch(); continue; // exit(-1);
} else {
strtmp = (char*)malloc(5*sizeof(char));
for( i=0; i<4; i++ )
strtmp[i] = fname[strlen(fname)-4+i];
strtmp[i]='\0';
if( stricmp( strtmp, ext ) != 0 )
{ // 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
printf("Error: file may not be a MP3(MPEG Layer-3) file.\n");
free(fname); fname=NULL;
free(strtmp); strtmp=NULL;
printf("\nPress any key to re-enter... ");
getch(); continue; // exit(-2);
} else {
free(strtmp); strtmp=NULL;
if( ( fp = fopen( fname, "rb" ) ) == NULL )
{ // 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
printf("Error: failed to open file: %s\n", fname );
free(fname); fname=NULL;
printf("\nPress any key to re-enter... ");
getch(); continue; // exit(-3);
} else {
fseek( fp, -128, SEEK_END );
strtmp = (char*)malloc(4*sizeof(char));
num_read = fread( strtmp, sizeof(char), 3, fp );
// if fread fails.. do something here
strtmp[num_read]='\0';
if( stricmp( strtmp, "TAG" ) != 0 )
{ // 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
printf("Error: failed to load ID3v1 infomation from file: %s\n", fname );
free(strtmp); strtmp=NULL;
free(fname); fname=NULL;
printf("\nPress any key to re-enter... ");
getch(); continue; // exit(-4);
} else {
TAG_ID3V1 tag;
free(strtmp); strtmp=NULL;

getID3v1( fp, &tag );

free(strtmp); strtmp=NULL;
printf("\nID3v1 Infomation:\n");
printf("Title: %s\n",tag.title);
printf("Artist: %s\n",tag.artist);
printf("Album: %s\n",tag.album);
printf("Year: %s\n",tag.year);
printf("Comment: %s\n",tag.comment);
i=(int)(tag.genre);
printf("Genre: [%d] %s\n",i,(0<i&&i<80)?genre_id3v1[i]:"<Undefined>");
}
// 代码开放,禁止抄袭,转载请注明hi.baidu.com/crazycola原创
free(fname); fname=NULL;
fclose(fp);
} // else( ( fp = fopen( fname, "rb" ) ) == NULL )
} // else( stricmp( strtmp, ext ) != 0 )
} // else( strlen(fname)<5 )
printf("\nEnter again? (ESC or Ctrl+C to abort) ");
c_yesno = getch();
}// while( c_yesno != 27 )
} // main

热心网友 时间:2022-06-28 22:13

在创造了MP3播放器的标准,出现了一个问题,与存储的数据档案。独立的MP3没有什么特别的方法这样做,所以在1996年,李家祥肯普又想出加上一小块的数据传送到音频文件,从而解决了这个问题。该标准被称为id3v1并很快成为标准存储元数据在MP3文件。该id3v1标签中占有128个字节,开始与弦乐标签。标签被放在最后一个MP3文件。

标签,让30个字节为标题,艺术家,专辑, "评论" , 4字节为一年,和一个字节,以确定体裁的歌曲。如果有一个项目,这是不到它的长度, 0是用来填充在空无的立场。

请写信交流语言程序阅读这些信息从一个MP3文件,并打印出来。

1 )使用命令行输入MP3文件名称;
2 )判断文件名的延伸,是" 500 " ;
3 )如果这是一个MP3文件时,法官是否有id3v1信息;
4 )假如它已id3v1信息,打印出所有这些;

样本输入

你可以下载样本MP3档案,从这里。

输出样本

标题:后来
专辑:我等你
时间: 2001
评论:好听的歌
体裁: 13

更多资讯:

以下类型的定义是在id3v1 :
0.blues
1.classic岩
2.country
3.dance
4.disco
5.funk
6.grunge
7.hip跳
8.jazz
9.metal
10.new年龄
11.oldies
12.other
13.pop
14.r及B
15.rap
16.reggae
17.rock
18.techno
19.instrial
20.alternative
21.ska
22.death金属
23.pranks
24.soundtrack
25.euro -技术
26.ambient
27.trip跳
28.vocal
29.jazz +畏缩
30.fusion
31.trance
32.classical
33.instrumental
34.acid
35.house
36.game
37.sound剪辑
38.gospel
39.noise
40.alternrock
41.bass
42.soul
43.punk
44.space
45.meditative
46.instrumental流行
47.instrumental岩
48.ethnic
49.gothic
50.darkwave
51.techno工业
52.electronic
53.pop -民俗
54.eurodance
55.dream
56.southern岩
57.comedy
58.cult
59.gangsta
60.top 40
61.christian说唱
62.pop/funk
63.jungle
64.native美国
65.cabaret
66.new波
67.psychadelic
68.rave
69.showtunes
70.trailer
71.lo -
72.tribal
73.acid朋克
74.acid爵士乐
75.polka
76.retro
77.musical
78.rock &辊
79.hard岩

热心网友 时间:2022-06-28 22:14

这是什么啊 看不懂
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中国和世界历史女性名人 盘点那些名垂千古的女人们 营养师多少钱一个月 红米手机充电怎么不显示快充画面 薯塔的做法(薯塔的做法是什么) 薯塔是如何做的薯塔的做法方法如何做薯塔怎样做 GND代表什么 皮肤干燥裂口子怎么办? 一到冬天小腿下面就自然出现口子 成的五笔dnnt是怎么拆的 成的五笔的打法是DNNT给我解释一下.. 奇迹和奇迹世界有什么不同,分别是什么时候推出的网络游戏? 云吞用啥一起煮 钢铁雄心2作弊 想玩奇迹世界,求奇迹世界资料 奇迹世界公测是什么时候?! 奇迹世界好玩吗 奇迹和奇迹世界有什么不同 华丽金属,死亡金属和歌特金属乐 TIG和TAG焊接电源能否通用 surfacego开启了旁白模式怎么关闭 柯南灰原哀的续集 求男主穿越到柯南的小说 女主是灰原或志保 完结的最好 名侦探柯南穿越文 女主是灰原哀 男主要穿越来的 求柯南同人 最好有灰原 灰原与柯南的小说,最后结局是他们在一起了。 柯南和灰原青梅竹马一起长大结婚是哪本小说 柯南和灰原同人有哪些 名侦探柯南里的 毛利兰和灰原哀的gl文 求柯南与灰原哀小说 给我一些柯南和灰原哀的小说 结局要他俩在一起的 奇迹世界好玩嘛? 奇迹世界经典,几点开启 为什么奇迹世界没人玩? 奇迹世界和MU的区别??? 卓越之剑、奇迹世界和惊天动地哪个网络游戏最好玩?哪个第二好玩 饺子和云吞怎么煮好吃 在包头市,那里有卖蟑螂药“毒力岛” 奇迹世界游戏评价! 包头市东河区哪里有卖蟑螂药 网络游戏~奇迹世界 肉粥各云吞要怎么煮才好吃 云吞汤底料怎么煮? 这是什么类型的鼻炎?怎么缓解? 网络游戏:奇迹世界什么时候在中国内地公测? 怎么查看机子的主板型号? 奇迹世界为什么倒闭啊?好可惜啊……从07年就一直在玩的游戏了 现在突然倒闭了。。好难过,, 网络游戏 奇迹世界 问:网络游戏奇迹世界里的职业加点问题 xp怎么在我的电脑里查看主板信息 我该怎么才能离开《奇迹世界》这款网络游戏?