Arduino:使用SdFat获取文件名

时间:2018-12-01 11:58:35

标签: file io arduino

我以前使用过SdFat,但是它似乎已经改变了,我找不到我理解的文档,而且示例更少。 我有一个Arduino项目,我试图根据SD卡上的文件给它分配任务。 例:    对于每个* .hex文件,请验证是否存在* _out.hex       {如果没有,那就干活创造一个} 我在SdFile.getFilename();上找到了文档,但是编译器告诉我没有成员... 我当前的代码像这样编译,并将信息打印到&Serial;中。但是,我需要在变量中添加文件名。

SdFile file;
char *chArray;

while (file.openNext(sd.vwd(), O_READ)) 
{
  file.printFileSize(&Serial);
  Serial.write(' ');
  file.printModifyDateTime(&Serial);
  Serial.write(' ');
  file.printName(&Serial);//->I need this output in char*
  if (file.isDir()) {
    // Indicate a directory.
    Serial.write('/');
  }
  Serial.println();
  file.close();
}

预先感谢大家的支持...

2 个答案:

答案 0 :(得分:0)

感谢您将我重定向到git;本来会以示例的形式感谢一个答案,但那时我可能还没有感到愚蠢,无法真正记住答案... 猜猜这就是我们试图在凌晨4点解决问题的结果... SdFile file.getName(char *,int)是我所需要的。 现在我可以得到.sleep(happy);

答案 1 :(得分:0)

这是我用来获取文件名的示例,例如 file

有一点问题虽然你需要猜测文件名size 这里我选择了 25,如果您的文件较大,请分别使用较大或较小的数字。

代码

int max_characters = 25;
char f_name[max_characters];
file.getName(f_name, max_characters);
String filename = String(f_name);
Serial.println(filename);

既然你想在char*

修改代码

SdFile file;
char *chArray;

while (file.openNext(sd.vwd(), O_READ)) 
{
  file.printFileSize(&Serial);
  Serial.write(' ');
  file.printModifyDateTime(&Serial);
  Serial.write(' ');
  file.printName(&Serial);//->I need this output in char*

//bruh here is the code
int max_characters = 25; //guess the needed characters
char f_name[max_characters]; //the filename variable you won't
file.getName(f_name, max_characters);
//f_name use for your needs


  if (file.isDir()) {
    // Indicate a directory.
    Serial.write('/');
  }
  Serial.println();
  file.close();
}

我刚刚阅读了开发人员在 github 中编写的代码

https://github.com/greiman/SdFat/blob/master/src/FatLib/FatFile.h

这里特别提到

bool getName(char* name, size_t size);
 /**
  * Get a file's Short File Name followed by a zero byte.
  *
  * \param[out] name An array of characters for the file's name.
  *                  The array must be at least 13 bytes long.
  * \return true for success or false for failure.
  */