just file
Dependencies: SDFileSystem mbed
Fork of wmx_laser by
Diff: main.cpp
- Revision:
- 10:40d607be2e87
- Parent:
- 8:edb685e9d93e
--- a/main.cpp Fri Sep 07 13:09:19 2018 +0000 +++ b/main.cpp Fri Sep 21 06:57:24 2018 +0000 @@ -1,66 +1,115 @@ +#include <string> +#include <vector> #include "mbed.h" -#include <math.h> -#include <cstring> -#include <stdlib.h> #include "SDFileSystem.h" -Serial pc(PA_9, PA_10); -//Serial serial(PA_2, PA_3); +//using namespace std; -char fileName[64]; -char buff[1024]; - -FILE * fp_open; +Serial ser2usb(PA_9, PA_10, 115200); // mosi, miso, sclk, cs, name SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd"); -void getFileName () -{ - pc.printf("type in a file name:\r\n"); - pc.scanf("%s", fileName); - pc.printf("got file name:%s\r\n", fileName); -} +char mydir[1024]; -void readFile(char * name) +vector<string> filenames; //filenames are stored in a vector string + +void read_file_names(char *dir) +//这个函数后期可以重载成带一个输入vector<string>引用对象的方法 +//这样这个vector可以不用声明成全局变量 +//already reload { - fp_open = fopen(name, "r"); - pc.printf("reading\r\n"); - for (int i = 0; fscanf(fp_open, "(%s)", buff) == 1; i++) + DIR *dp;//一个文件地址对象指针 + struct dirent *dirp; + //下面是dirent的定义 + //struct dirent + //{ + // long d_ino; + // off_t d_off; + // unsigned short d_reclen; + // char d_name [NAME_MAX+1]; + //} + + /**************************************************************** + 这里的dirent.h是linux下的常用头文件 + 使用方法参看 + https://blog.csdn.net/dream_allday/article/details/75243818 + *****************************************************************/ + + dp = opendir(dir); + //read all directory and file names in current directory into filename vector + while((dirp = readdir(dp)) != NULL) { - pc.printf("(%s)\r\n", buff); + filenames.push_back(string(dirp->d_name)); + //push_back是vector对象中的一个方法 + //用于将元素添加到vector对象末尾 + //这里是将一个dirent类型的结构体对象中的d_name(文件名)添加到filenames的末尾 } - pc.printf("read done.\r\n"); + closedir(dp); } -void writeFile(char * name) +void read_file_names(char *dir, vector<string> & buff_str) { - int a = 0, - b = 0, - c = 0; - fp_open = fopen(name, "w"); - pc.printf("writing\r\n"); - pc.printf("type in data(use '0 0 0' to end)\r\n"); + DIR *dp; + struct dirent *dirp; + dp = opendir(dir); + //read all directory and file names in current directory into filename vector + while((dirp = readdir(dp)) != NULL) { + buff_str.push_back(string(dirp->d_name)); + } + closedir(dp); +} + + +void testFun1() +{ + ser2usb.printf("hello world\r\n"); + mkdir("/sd/mydir", 0777); while(1) { - pc.scanf("%d %d %d", &a, &b, &c); - if (a == 0 && b == 0 && c == 0) - break; + ser2usb.printf("type in directory:\r\n"); + ser2usb.scanf("%s", mydir); + ser2usb.printf("Opening %s\n", mydir); + FILE * fp = fopen(mydir, "w"); + if (fp == NULL) + { + ser2usb.printf("Could not open file for write\r\n"); + } else { - pc.printf("writing data: (%d,%d,%d)\r\n", a, b, c); - fprintf(fp_open, "(%d,%d,%d)", a, b, c); + ser2usb.printf("Open successfully\r\n"); + fprintf(fp, "hello SD\r\n"); + ser2usb.printf("Done, Closing\r\n"); + fclose(fp); + + //ser2usb.printf("goodbye\r\n"); + //return 0; } } - fclose(fp_open); - pc.printf("write done.\r\n"); -} +} int main () { - pc.baud(115200); - pc.printf("hello\r\n"); - getFileName(); - writeFile(fileName); - readFile(fileName); + //read_file_names("/sd"); + read_file_names("/sd", filenames); + // print filename strings from vector using an iterator + for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++) + /****************************** + 这里iterator是vector类中的迭代器对象 + 循环里从vector的第一个元素地址开始 + 迭代到最后一个 + 迭代器的其他用法参看 + https://blog.csdn.net/yyangzhenjie/article/details/74518905 + ******************************/ + { + ser2usb.printf("%s\n\r",(*it).c_str()); + /*************************** + c_str是string对象的一个方法 + 返回一个与string对象内容相同的字符指针 + 设计之初是为了和c语言兼容, 因为C语言没有字符串对象 + 详细内容参看 + https://zhidao.baidu.com/question/104592558.html + ****************************/ + } + }