just file

Dependencies:   SDFileSystem mbed

Fork of wmx_laser by w mx

Committer:
Dennis_Yu
Date:
Fri Sep 21 06:57:24 2018 +0000
Revision:
10:40d607be2e87
Parent:
8:edb685e9d93e
???????sd????????; ??????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dennis_Yu 10:40d607be2e87 1 #include <string>
Dennis_Yu 10:40d607be2e87 2 #include <vector>
zhangyx 0:1170747a672f 3 #include "mbed.h"
zhangyx 4:ae6f380a5b41 4 #include "SDFileSystem.h"
zhangyx 0:1170747a672f 5
Dennis_Yu 10:40d607be2e87 6 //using namespace std;
zhangyx 4:ae6f380a5b41 7
Dennis_Yu 10:40d607be2e87 8 Serial ser2usb(PA_9, PA_10, 115200);
Dennis_Yu 8:edb685e9d93e 9
zhangyx 4:ae6f380a5b41 10 // mosi, miso, sclk, cs, name
zhangyx 4:ae6f380a5b41 11 SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd");
zhangyx 4:ae6f380a5b41 12
Dennis_Yu 10:40d607be2e87 13 char mydir[1024];
zhangyx 4:ae6f380a5b41 14
Dennis_Yu 10:40d607be2e87 15 vector<string> filenames; //filenames are stored in a vector string
Dennis_Yu 10:40d607be2e87 16
Dennis_Yu 10:40d607be2e87 17 void read_file_names(char *dir)
Dennis_Yu 10:40d607be2e87 18 //这个函数后期可以重载成带一个输入vector<string>引用对象的方法
Dennis_Yu 10:40d607be2e87 19 //这样这个vector可以不用声明成全局变量
Dennis_Yu 10:40d607be2e87 20 //already reload
zhangyx 4:ae6f380a5b41 21 {
Dennis_Yu 10:40d607be2e87 22 DIR *dp;//一个文件地址对象指针
Dennis_Yu 10:40d607be2e87 23 struct dirent *dirp;
Dennis_Yu 10:40d607be2e87 24 //下面是dirent的定义
Dennis_Yu 10:40d607be2e87 25 //struct dirent
Dennis_Yu 10:40d607be2e87 26 //{
Dennis_Yu 10:40d607be2e87 27 // long d_ino;
Dennis_Yu 10:40d607be2e87 28 // off_t d_off;
Dennis_Yu 10:40d607be2e87 29 // unsigned short d_reclen;
Dennis_Yu 10:40d607be2e87 30 // char d_name [NAME_MAX+1];
Dennis_Yu 10:40d607be2e87 31 //}
Dennis_Yu 10:40d607be2e87 32
Dennis_Yu 10:40d607be2e87 33 /****************************************************************
Dennis_Yu 10:40d607be2e87 34 这里的dirent.h是linux下的常用头文件
Dennis_Yu 10:40d607be2e87 35 使用方法参看
Dennis_Yu 10:40d607be2e87 36 https://blog.csdn.net/dream_allday/article/details/75243818
Dennis_Yu 10:40d607be2e87 37 *****************************************************************/
Dennis_Yu 10:40d607be2e87 38
Dennis_Yu 10:40d607be2e87 39 dp = opendir(dir);
Dennis_Yu 10:40d607be2e87 40 //read all directory and file names in current directory into filename vector
Dennis_Yu 10:40d607be2e87 41 while((dirp = readdir(dp)) != NULL)
Dennis_Yu 8:edb685e9d93e 42 {
Dennis_Yu 10:40d607be2e87 43 filenames.push_back(string(dirp->d_name));
Dennis_Yu 10:40d607be2e87 44 //push_back是vector对象中的一个方法
Dennis_Yu 10:40d607be2e87 45 //用于将元素添加到vector对象末尾
Dennis_Yu 10:40d607be2e87 46 //这里是将一个dirent类型的结构体对象中的d_name(文件名)添加到filenames的末尾
zhangyx 4:ae6f380a5b41 47 }
Dennis_Yu 10:40d607be2e87 48 closedir(dp);
zhangyx 4:ae6f380a5b41 49 }
zhangyx 4:ae6f380a5b41 50
Dennis_Yu 10:40d607be2e87 51 void read_file_names(char *dir, vector<string> & buff_str)
zhangyx 4:ae6f380a5b41 52 {
Dennis_Yu 10:40d607be2e87 53 DIR *dp;
Dennis_Yu 10:40d607be2e87 54 struct dirent *dirp;
Dennis_Yu 10:40d607be2e87 55 dp = opendir(dir);
Dennis_Yu 10:40d607be2e87 56 //read all directory and file names in current directory into filename vector
Dennis_Yu 10:40d607be2e87 57 while((dirp = readdir(dp)) != NULL) {
Dennis_Yu 10:40d607be2e87 58 buff_str.push_back(string(dirp->d_name));
Dennis_Yu 10:40d607be2e87 59 }
Dennis_Yu 10:40d607be2e87 60 closedir(dp);
Dennis_Yu 10:40d607be2e87 61 }
Dennis_Yu 10:40d607be2e87 62
Dennis_Yu 10:40d607be2e87 63
Dennis_Yu 10:40d607be2e87 64 void testFun1()
Dennis_Yu 10:40d607be2e87 65 {
Dennis_Yu 10:40d607be2e87 66 ser2usb.printf("hello world\r\n");
Dennis_Yu 10:40d607be2e87 67 mkdir("/sd/mydir", 0777);
Dennis_Yu 8:edb685e9d93e 68 while(1)
Dennis_Yu 8:edb685e9d93e 69 {
Dennis_Yu 10:40d607be2e87 70 ser2usb.printf("type in directory:\r\n");
Dennis_Yu 10:40d607be2e87 71 ser2usb.scanf("%s", mydir);
Dennis_Yu 10:40d607be2e87 72 ser2usb.printf("Opening %s\n", mydir);
Dennis_Yu 10:40d607be2e87 73 FILE * fp = fopen(mydir, "w");
Dennis_Yu 10:40d607be2e87 74 if (fp == NULL)
Dennis_Yu 10:40d607be2e87 75 {
Dennis_Yu 10:40d607be2e87 76 ser2usb.printf("Could not open file for write\r\n");
Dennis_Yu 10:40d607be2e87 77 }
Dennis_Yu 8:edb685e9d93e 78 else
Dennis_Yu 8:edb685e9d93e 79 {
Dennis_Yu 10:40d607be2e87 80 ser2usb.printf("Open successfully\r\n");
Dennis_Yu 10:40d607be2e87 81 fprintf(fp, "hello SD\r\n");
Dennis_Yu 10:40d607be2e87 82 ser2usb.printf("Done, Closing\r\n");
Dennis_Yu 10:40d607be2e87 83 fclose(fp);
Dennis_Yu 10:40d607be2e87 84
Dennis_Yu 10:40d607be2e87 85 //ser2usb.printf("goodbye\r\n");
Dennis_Yu 10:40d607be2e87 86 //return 0;
zhangyx 4:ae6f380a5b41 87 }
zhangyx 4:ae6f380a5b41 88 }
Dennis_Yu 10:40d607be2e87 89 }
zhangyx 2:a50b794b8ede 90
Dennis_Yu 8:edb685e9d93e 91 int main ()
zhangyx 4:ae6f380a5b41 92 {
Dennis_Yu 10:40d607be2e87 93 //read_file_names("/sd");
Dennis_Yu 10:40d607be2e87 94 read_file_names("/sd", filenames);
Dennis_Yu 10:40d607be2e87 95 // print filename strings from vector using an iterator
Dennis_Yu 10:40d607be2e87 96 for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++)
Dennis_Yu 10:40d607be2e87 97 /******************************
Dennis_Yu 10:40d607be2e87 98 这里iterator是vector类中的迭代器对象
Dennis_Yu 10:40d607be2e87 99 循环里从vector的第一个元素地址开始
Dennis_Yu 10:40d607be2e87 100 迭代到最后一个
Dennis_Yu 10:40d607be2e87 101 迭代器的其他用法参看
Dennis_Yu 10:40d607be2e87 102 https://blog.csdn.net/yyangzhenjie/article/details/74518905
Dennis_Yu 10:40d607be2e87 103 ******************************/
Dennis_Yu 10:40d607be2e87 104 {
Dennis_Yu 10:40d607be2e87 105 ser2usb.printf("%s\n\r",(*it).c_str());
Dennis_Yu 10:40d607be2e87 106 /***************************
Dennis_Yu 10:40d607be2e87 107 c_str是string对象的一个方法
Dennis_Yu 10:40d607be2e87 108 返回一个与string对象内容相同的字符指针
Dennis_Yu 10:40d607be2e87 109 设计之初是为了和c语言兼容, 因为C语言没有字符串对象
Dennis_Yu 10:40d607be2e87 110 详细内容参看
Dennis_Yu 10:40d607be2e87 111 https://zhidao.baidu.com/question/104592558.html
Dennis_Yu 10:40d607be2e87 112 ****************************/
Dennis_Yu 10:40d607be2e87 113 }
Dennis_Yu 10:40d607be2e87 114
zhangyx 0:1170747a672f 115 }