just file

Dependencies:   SDFileSystem mbed

Fork of wmx_laser by w mx

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
+        ****************************/
+    }
+ 
 }