gpt4 book ai didi

c - 在 C 中使用 dirent.h 读取和选择文件

转载 作者:行者123 更新时间:2023-11-30 17:26:51 26 4
gpt4 key购买 nike

我是微 Controller 编程新手,我遇到了一个问题。

我正在尝试制作一个从 USB 播放音乐的设备。我可以从 USB 读取,但我不知道如何选择某个文件。我正在使用dirent

到目前为止我的代码:

while (true) {
USBHostMSD msd("usb");
//setup PWM hardware for a Class D style audio output
PWMout.period(1.0/400000.0);

// wait until connected to a USB device
while(!msd.connect()) {
Thread::wait(500);
}

FILE *wave_file;
lcd.cls();
lcd.locate(0,3);


DIR *dir;
struct dirent *ent;
int i=0;
int stevilo_datotek =0;


dir = opendir ("/usb/");
if (dir != NULL)
{


while ((ent = readdir (dir)) != NULL)
{
lcd.printf ("%s\n", ent->d_name[0]);
}
}

现在此代码显示 USB 上的内容。如何使用设备上的按钮浏览 USB 上的文件?我想知道是否有一种方法可以为某些歌曲分配特定的编号,以便我可以导航。我研究了dirent.h文件这么久,我找不到dirent在哪里保存文件顺序(如果有的话)。

最佳答案

你可能会混淆dirent.h的用途,简而言之,只见树木很难。

您可以将信息(ent->d_name,注意ent->d_name是一个指向字符数组的指针,通常称为“字符串”)读取到数据结构(如数组或列表)中,然后将该结构与检测按钮按下的代码一起使用,将索引向上或向下移动到数组信息中(移动到更大或更少的索引,请确保检查索引是否超出范围或结构)。或者您可以创建代码,其中 while 循环等待按下按钮,然后只读取文件名(使用eekdir 向后移动)。

更新(回复评论):请记住,文件系统是树结构,如下所示:

/ (root) +--- dir1 ----------------------------+- dir1.1
---- dir2 (empty) -- file1.1
---- dir3 ---- dir3.1 +--- file3.1
---- file1 ---- file3.2
---- file2

您必须决定如何处理这个问题,您是否只支持一个目录(让他们将所有音乐文件放在一个地方),允许他们导航目录,或者浏览所有目录,仅选择您知道如何处理的文件玩吗?

文件(或子目录)没有继承顺序,并且在某些系统中可以随时添加或删除文件。

这是一个非常简单的示例,说明了保存目录条目列表的一种方法:

char *names[400]; // make space for 400 names
int ix;
ix = 0;
if (dir != NULL)
{
while ((ent = readdir (dir)) != NULL)
{
lcd.printf ("%s\n", ent->d_name[0]);
// allocate memory to store the name
names[ix] = (char*) malloc(strlen(ent->d_name)); // strlen from string.h
// malloc from stdlib.h
// copy the name from the directory entry
strcpy(names[ix], ent->d_name); // strcpy from string.h
ix++;
if (ix >= 400)
{
// do something because your array isn't big enough
}
}
}

现在你的名字已经存在于数组“names”中,并且可以通过索引来寻址它们。值“ix-1”是您的姓氏,0 是您的名字。按下按钮可以增加/减少名称数组中的索引,该数组标识您想要的名称。请记住,其中一些名称可能是目录名而不是文件名。

诚然,这是简单的想法,您可能想要分配数组而不是使用固定值(事实上,如果您想将“名称”数组传递给调用函数,则必须这样做),有“安全” strcpy 的版本(旨在帮助防止内存溢出损坏)等,但它应该让您了解如何将名称保留在内存中。

关于c - 在 C 中使用 dirent.h 读取和选择文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26612746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com