Linux系统编程阶段案例:循环遍历一个目录下的所有.mp3文件,打印输出文件名。(目录操作相关函数介绍)

这里用到的一些知识点:

1.主函数传参

int main(int argc,char* argv[])
        argc:传参的个数  包含自身
        argv:传的参数
        argv[0]:可执行程序本身
        argv[1]:真正的第一个参数

代码如下:

int main(int argc,char *argv[])
{
	if(argc==1)
		find_mp3(".");  //如果在终端只输入一个参数,默认为当前目录
	else
		find_mp3(argv[1]);//第二个参数为要查找的目录,如:  ../hw
	return 0;
}

2.相关目录操作函数介绍

        opendir():打开目录    

        函数的头文件:

                #include <sys/types.h>

                #include <dirent.h>

        函数的原型: DIR *opendir(const char *name);

        函数的参数:const char *name:要打开的目录的名字

        函数的返回值:成功返回目录流的指针 (DIR *)失败,返回 NULL.

        closedir():关闭目录

        函数的头文件:

                 #include <sys/types.h>

                #include <dirent.h>

        函数的原型:int closedir(DIR *dirp);

        函数的参数:DIR *dirp:目录流指针

        函数的返回值:成功返回  0    失败返回  -1

        readdir():读取目录里的信息     

        函数的头文件:#include <dirent.h>

        函数的原型:struct dirent *readdir(DIR *dirp);

        函数的参数:DIR *dirp:目录流指针

        函数的返回值:

        成功返回读取到文件的信息的结构体的指针

        

         失败返回 NULL

存储目录中的文件信息(文件名、扩展名等等)

struct dirent

{

        long d_ino;                                /*  索引节点号 */

        off_t d_off;                               /*在目录文件中偏移到目录头的偏移量*/

        unsigned short d_reclen;         /* 文件名长 */

        unsigned char d_type;          /*  文件类型 */

        char d_name [NAME_MAX+1]; /*文件名,最长255字符 */

};

完整代码如下所示:

#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
int find_mp3(char *pathname);
struct dirent *mydir =NULL;

int main(int argc,char *argv[])
{
	if(argc==1)
		find_mp3(".");
	else
		find_mp3(argv[1]);
	return 0;
}
int find_mp3(char *pathname)
{
	DIR *dir = NULL;
	dir = opendir(pathname);
	if(dir == NULL)
	{
		perror("opendir");
		return 0;
		
	}
	//mydir = readdir(dir);
	
	while((mydir = readdir(dir)) != NULL)
	{	
		if(!strcmp(mydir->d_name,".") || !strcmp(mydir->d_name,".."))
		{
			continue; //逃过隐藏的 .和 ..目录
		}
		for(int i = 0;i < strlen(mydir->d_name);i++)
		{
			if(mydir->d_name[i] == '.' && mydir->d_name[i+1] == 'm' && mydir->d_name[i+2] == 'p' && mydir->d_name[i+3] == '3')
			{
				printf("%s\n",mydir->d_name);	
				break;
			}

		}	
	}
	closedir(dir);

}

我把.mp3文件存在一个hw1文件夹下面,里面还有其它文件,截图如下:

 在终端输入命令:gcc mp3.c -o mp3

                              ./mp3 ./hw1

运行结果如下图所示:

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要将Linux中的MP3文件转成数组,可以使用以下步骤: 1. 首先,在Linux系统上安装必要的工具和依赖项。例如,安装FFmpeg工具,它是一个开源的多媒体框架,可以处理音频和视频文件。 2. 打开终端,并导航到存储MP3文件目录。 3. 使用FFmpeg命令将MP3文件转换成一个数组。例如,使用以下命令将文件example.mp3转换为数组example_array.txt: ffmpeg -i example.mp3 -f s16le -acodec pcm_s16le example_array.txt 这个命令将MP3文件转换为16位的线性PCM格式,并将转换后的数组以文本文件的形式保存。 4. 等待FFmpeg完成转换过程。这可能需要一段时间,取决于MP3文件的大小和系统性能。 5. 转换完成后,可以打开生成的文本文件,查看转换后的数组。每个元素都代表了音频采样的值。 通过以上步骤,你就可以将Linux中的MP3文件转成数组了。请注意,转换后的数组中的元素可能非常庞大,具体取决于原始MP3文件的大小和音频采样率。因此,在处理和使用转换后的数组时,可能需要对数组进行适当的处理和压缩。 ### 回答2: 要将Linux系统中的MP3文件转换成数组,您可以按照以下步骤进行操作: 1. 首先,您需要安装一个适用于Linux系统的音频处理工具,如FFmpeg。您可以使用命令`sudo apt-get install ffmpeg`来安装FFmpeg。 2. 在安装完成后,通过使用以下命令将MP3文件转换为WAV格式: ``` ffmpeg -i input.mp3 output.wav ``` 其中,`input.mp3`是您要转换的MP3文件文件名,而`output.wav`是转换后的WAV文件文件名。 3. 转换完成后,您可以使用Python或其他合适的编程语言来读取WAV文件并将其转换为数组。以下是一个示例Python代码片段,显示了如何使用`scipy`库将WAV文件读取为数组: ```python from scipy.io import wavfile sample_rate, data = wavfile.read('output.wav') ``` 通过上述代码片段,`sample_rate`变量将保存采样率,而`data`变量将保存包含音频数据的数组。 4. 最后,您可以使用该数组进行进一步的音频处理或分析。 请注意,MP3是有损压缩格式,转换为WAV格式后,可能会损失一些音质。因此,如果您需要保持较高的音质,请考虑使用无损压缩格式,如FLAC。 ### 回答3: 要将Linux上的MP3文件转换为数组,可以通过使用Shell脚本或编程语言来实现。 一种常见的方法是使用Shell脚本,以下是一个简单的示例: ```shell #!/bin/bash mp3_directory="/path/to/mp3/directory" mp3_files=() # 遍历目录中的MP3文件,并将它们添加到数组中 for file in $mp3_directory/*.mp3; do mp3_files+=("$file") done # 打印数组内容 for mp3_file in "${mp3_files[@]}"; do echo "$mp3_file" done ``` 在上述示例中,将`mp3_directory`变量设置为包含MP3文件目录的路径。然后,使用`for`循环遍历目录中的所有MP3文件,并将它们添加到`mp3_files`数组中。最后,使用另一个`for`循环打印数组中的所有文件路径。 如果您希望使用其他编程语言,例如Python,也可以使用相应的库和模块实现类似的功能。以下是一个使用Python的示例: ```python import os mp3_directory = "/path/to/mp3/directory" mp3_files = [] # 遍历目录中的MP3文件,并将它们添加到列表中 for file in os.listdir(mp3_directory): if file.endswith(".mp3"): mp3_files.append(os.path.join(mp3_directory, file)) # 打印列表内容 for mp3_file in mp3_files: print(mp3_file) ``` 在这个示例中,首先导入`os`模块,然后设置`mp3_directory`变量为包含MP3文件目录的路径。然后,使用`os.listdir`函数遍历目录中的所有文件,并通过检查文件扩展名是否以`.mp3`结尾来筛选出MP3文件。最后,将它们添加到`mp3_files`列表中,并使用`for`循环打印列表中的所有文件路径。 无论是使用Shell脚本还是编程语言,以上的示例都可以将Linux上的MP3文件转换为数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白菜123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值