C++ 用户控制在Arduino上遍历SD卡目录

C++ 用户控制在Arduino上遍历SD卡目录,c++,arduino,sd-card,fileinfo,C++,Arduino,Sd Card,Fileinfo,我正在尝试编写一个程序,允许用户通过触摸屏上的按钮遍历SD卡的内容(假设只有一级文件;也就是没有文件夹)。但是,我发现无法获得SD卡上所有文件的“列表”: 我不能只创建一个字符串数组或char*,因为我不知道数字 卡片上的文件数量。此外,我希望容器是动态的,如果 可能 我无法创建向量,因为Arduino无法识别std::vector 或者vector,即使我需要 在Arduino的C语言中不存在搜索google Productsnew++ 我可以使用malloc(或new),但这需要创建自己

我正在尝试编写一个程序,允许用户通过触摸屏上的按钮遍历SD卡的内容(假设只有一级文件;也就是没有文件夹)。但是,我发现无法获得SD卡上所有文件的“列表”:

  • 我不能只创建一个
    字符串数组
    char*
    ,因为我不知道数字 卡片上的文件数量。此外,我希望容器是动态的,如果 可能

  • 我无法创建向量,因为Arduino无法识别
    std::vector
    或者
    vector
    ,即使我需要

  • 在Arduino的C语言中不存在搜索google Products
    new
    ++

我可以使用
malloc
(或
new
),但这需要创建自己的容器类。尽管这可能很有趣,但我所做的目标并不是实现一个动态容器类


我在搜索这样一个函数的过程中是否遗漏了一些重要内容?

我建议您看看我的示例和示例

有两个问题:

1) 您需要从欣赏Arduino没有足够的资源(SRAM)来保存整个SdFAT目录的角度来处理这个问题。因此,我的方法是使用用户控制台保留列表。它将目录内容连同相应的编号一起转储到控制台。用户可以从中选择想要输入的号码。类似地,也会执行相同的操作,但在生成HTML时,它会生成一个指向相应列表项的链接。因此,列表存储在作为浏览器或串行监视器的控制台上

2) 提供的默认SD库不足以执行所需的操作。最近,Arduino作为发动机罩下级别的制造商注册成立。但是限制了它。其中,使用Bill的本机SdFat库允许您使用其他方法访问单个对象,例如
getFilename()
,这些方法在SD中不可用。在浏览目录时,这是必需的。
sd.ls(ls|u DATE | ls|u SIZE)
只会直接转储到serial。在需要使用的位置,可以访问各个文件本身。如下所示或


此外,函数中还显示了可通过引用访问的隐藏公共方法,以获得对文件的更离散的处理。

您看到了吗@萨姆拉德:是的。不幸的是,我不能让代码为我使用的SD卡工作。如果(!card.init(SPI\u-HALF\u-SPEED,chipSelect)),它会在
上不断失败,即使我已经让SD卡与其他SD示例一起工作,你会得到什么错误?他们建议在(!card.init(SPI四分之一速度,chipSelect))失败时使用
。参见@SamRad,我在这一行得到了错误,我想建议@mpflaga提到的方法。我认为值得一试。
SdFile file;
char filename[13];
sd.chdir("/",true);
uint16_t count = 1;
while (file.openNext(sd.vwd(),O_READ))
{
  file.getFilename(filename);
  Serial.print(count);
  Serial.print(F(": "));
  Serial.println(filename);
  count++;
}
file.close();