Example writing to SD card, sford (original) 21 June 2011: Enhanced by D. Wendelboe to test SD file and directories. Illustrates the following: * rename a file (via copy & delete old). * copy an existing file to a new file. * listing of SD directory names. TODO: Add method to list filenames in a directory. Add a method to return file length.

Dependencies:   mbed

Committer:
YouTahDoug
Date:
Tue Jun 21 22:59:02 2011 +0000
Revision:
0:d0eea54553ed
Child:
1:4a0985d3a848

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YouTahDoug 0:d0eea54553ed 1 // example writing to SD card, sford
YouTahDoug 0:d0eea54553ed 2 // Modified 21 June 2011 by D. Wendelboe to test SD file and directory creation.
YouTahDoug 0:d0eea54553ed 3 // Two procedures were added. One to renam a file (via copy), and a procedure to
YouTahDoug 0:d0eea54553ed 4 // copy a file.
YouTahDoug 0:d0eea54553ed 5
YouTahDoug 0:d0eea54553ed 6 #include "mbed.h"
YouTahDoug 0:d0eea54553ed 7 #include "SDFileSystem.h"
YouTahDoug 0:d0eea54553ed 8
YouTahDoug 0:d0eea54553ed 9 SDFileSystem sd(p5, p6, p7, p8, "sd");
YouTahDoug 0:d0eea54553ed 10
YouTahDoug 0:d0eea54553ed 11 int file_rename(const char *oldfile, const char *newfile);
YouTahDoug 0:d0eea54553ed 12 int file_copy(const char *oldfile, const char *newfile);
YouTahDoug 0:d0eea54553ed 13
YouTahDoug 0:d0eea54553ed 14 int main()
YouTahDoug 0:d0eea54553ed 15 {
YouTahDoug 0:d0eea54553ed 16 int i, status;
YouTahDoug 0:d0eea54553ed 17
YouTahDoug 0:d0eea54553ed 18 printf("Hello World!\n");
YouTahDoug 0:d0eea54553ed 19
YouTahDoug 0:d0eea54553ed 20 mkdir("/sd/mydir1", 0777);
YouTahDoug 0:d0eea54553ed 21 mkdir("/sd/mydir2", 0777);
YouTahDoug 0:d0eea54553ed 22 mkdir("/sd/mydir3", 0777);
YouTahDoug 0:d0eea54553ed 23
YouTahDoug 0:d0eea54553ed 24 //--------------------------------------------------------------
YouTahDoug 0:d0eea54553ed 25 FILE *fp = fopen("/sd/mydir1/sdtest.txt", "w");
YouTahDoug 0:d0eea54553ed 26 if(fp == NULL) {
YouTahDoug 0:d0eea54553ed 27 error("Could not open file for write\n");
YouTahDoug 0:d0eea54553ed 28 }
YouTahDoug 0:d0eea54553ed 29 fprintf(fp, "Hello SD Card World!\n");
YouTahDoug 0:d0eea54553ed 30 for (i=0; i<10; i++)
YouTahDoug 0:d0eea54553ed 31 {
YouTahDoug 0:d0eea54553ed 32 fprintf(fp, "Line #%i\n", i);
YouTahDoug 0:d0eea54553ed 33 }
YouTahDoug 0:d0eea54553ed 34 fclose(fp);
YouTahDoug 0:d0eea54553ed 35
YouTahDoug 0:d0eea54553ed 36 //--------------------------------------------------------------
YouTahDoug 0:d0eea54553ed 37 printf("Open directory on /sd\n");
YouTahDoug 0:d0eea54553ed 38 DIR *d = opendir("/sd");
YouTahDoug 0:d0eea54553ed 39 struct dirent *p;
YouTahDoug 0:d0eea54553ed 40 while((p = readdir(d)) != NULL) {
YouTahDoug 0:d0eea54553ed 41 printf("%s\n", p->d_name);
YouTahDoug 0:d0eea54553ed 42 }
YouTahDoug 0:d0eea54553ed 43 closedir(d);
YouTahDoug 0:d0eea54553ed 44 printf("Directory closed\n");
YouTahDoug 0:d0eea54553ed 45
YouTahDoug 0:d0eea54553ed 46 //--------------------------------------------------------------
YouTahDoug 0:d0eea54553ed 47 printf("Remove /sd/mydir3\n");
YouTahDoug 0:d0eea54553ed 48 remove("/sd/mydir3");
YouTahDoug 0:d0eea54553ed 49
YouTahDoug 0:d0eea54553ed 50 //--------------------------------------------------------------
YouTahDoug 0:d0eea54553ed 51 printf("Rename sdtest.txt to doug.txt\n");
YouTahDoug 0:d0eea54553ed 52 status = file_rename("/sd/mydir1/sdtest.txt", "/sd/mydir1/doug.txt");
YouTahDoug 0:d0eea54553ed 53
YouTahDoug 0:d0eea54553ed 54 if (status == -1) printf("Error: New file not created: %d\n", status);
YouTahDoug 0:d0eea54553ed 55 else printf("New file was created: %d\n", status);
YouTahDoug 0:d0eea54553ed 56
YouTahDoug 0:d0eea54553ed 57 //--------------------------------------------------------------
YouTahDoug 0:d0eea54553ed 58 status = file_copy("/sd/mydir1/doug.txt", "/sd/mydir1/doug2.txt");
YouTahDoug 0:d0eea54553ed 59
YouTahDoug 0:d0eea54553ed 60 if (status == -1) printf("Error: file not copied: %d\n", status);
YouTahDoug 0:d0eea54553ed 61 else printf("Success: file copied: %d\n", status);
YouTahDoug 0:d0eea54553ed 62
YouTahDoug 0:d0eea54553ed 63 //--------------------------------------------------------------
YouTahDoug 0:d0eea54553ed 64 fp = fopen("/sd/mydir2/sdtest2.txt", "w");
YouTahDoug 0:d0eea54553ed 65 if(fp == NULL) {
YouTahDoug 0:d0eea54553ed 66 error("Could not open file for write\n");
YouTahDoug 0:d0eea54553ed 67 }
YouTahDoug 0:d0eea54553ed 68 fprintf(fp, "This is a second directory.\n");
YouTahDoug 0:d0eea54553ed 69 for (i=0; i<10; i++) {
YouTahDoug 0:d0eea54553ed 70 fprintf(fp, "Line #%C\n", i+'a');
YouTahDoug 0:d0eea54553ed 71 }
YouTahDoug 0:d0eea54553ed 72 fclose(fp);
YouTahDoug 0:d0eea54553ed 73
YouTahDoug 0:d0eea54553ed 74 printf("Goodbye World!\n");
YouTahDoug 0:d0eea54553ed 75 }
YouTahDoug 0:d0eea54553ed 76
YouTahDoug 0:d0eea54553ed 77 //***********************************************************
YouTahDoug 0:d0eea54553ed 78 // file_rename: renames a file.
YouTahDoug 0:d0eea54553ed 79 // Kind of hoakey as it moves data instead of adjusting
YouTahDoug 0:d0eea54553ed 80 // the file name in the directory.
YouTahDoug 0:d0eea54553ed 81 // Checks to insure the file was renamed.
YouTahDoug 0:d0eea54553ed 82 // Returns -1 = error; 0 = success
YouTahDoug 0:d0eea54553ed 83 //***********************************************************
YouTahDoug 0:d0eea54553ed 84 int file_rename(const char *oldfile, const char *newfile) {
YouTahDoug 0:d0eea54553ed 85 int retval = 0;
YouTahDoug 0:d0eea54553ed 86 int ch;
YouTahDoug 0:d0eea54553ed 87
YouTahDoug 0:d0eea54553ed 88 FILE *fpold = fopen(oldfile, "r");
YouTahDoug 0:d0eea54553ed 89 FILE *fpnew = fopen(newfile, "w");
YouTahDoug 0:d0eea54553ed 90
YouTahDoug 0:d0eea54553ed 91 while (1) {
YouTahDoug 0:d0eea54553ed 92 ch = fgetc(fpold);
YouTahDoug 0:d0eea54553ed 93 if (ch == EOF) break;
YouTahDoug 0:d0eea54553ed 94 fputc(ch, fpnew);
YouTahDoug 0:d0eea54553ed 95 }
YouTahDoug 0:d0eea54553ed 96
YouTahDoug 0:d0eea54553ed 97 fclose(fpnew);
YouTahDoug 0:d0eea54553ed 98 fclose(fpold);
YouTahDoug 0:d0eea54553ed 99
YouTahDoug 0:d0eea54553ed 100 fpnew = fopen(newfile, "r");
YouTahDoug 0:d0eea54553ed 101 if(fpnew == NULL) {
YouTahDoug 0:d0eea54553ed 102 retval = (-1);
YouTahDoug 0:d0eea54553ed 103 }
YouTahDoug 0:d0eea54553ed 104 else {
YouTahDoug 0:d0eea54553ed 105 remove(oldfile);
YouTahDoug 0:d0eea54553ed 106 }
YouTahDoug 0:d0eea54553ed 107 return (retval);
YouTahDoug 0:d0eea54553ed 108 }
YouTahDoug 0:d0eea54553ed 109
YouTahDoug 0:d0eea54553ed 110 //***********************************************************
YouTahDoug 0:d0eea54553ed 111 // file_copy: Copies a file
YouTahDoug 0:d0eea54553ed 112 // Checks to insure destination file was created.
YouTahDoug 0:d0eea54553ed 113 // Returns -1 = error; 0 = success
YouTahDoug 0:d0eea54553ed 114 //***********************************************************
YouTahDoug 0:d0eea54553ed 115 int file_copy(const char *oldfile, const char *newfile) {
YouTahDoug 0:d0eea54553ed 116 int retval = 0;
YouTahDoug 0:d0eea54553ed 117 int ch;
YouTahDoug 0:d0eea54553ed 118
YouTahDoug 0:d0eea54553ed 119 FILE *fpold = fopen(oldfile, "r");
YouTahDoug 0:d0eea54553ed 120 FILE *fpnew = fopen(newfile, "w");
YouTahDoug 0:d0eea54553ed 121
YouTahDoug 0:d0eea54553ed 122 while (1) {
YouTahDoug 0:d0eea54553ed 123 ch = fgetc(fpold);
YouTahDoug 0:d0eea54553ed 124 if (ch == EOF) break;
YouTahDoug 0:d0eea54553ed 125 fputc(ch, fpnew);
YouTahDoug 0:d0eea54553ed 126 }
YouTahDoug 0:d0eea54553ed 127
YouTahDoug 0:d0eea54553ed 128 fclose(fpnew);
YouTahDoug 0:d0eea54553ed 129 fclose(fpold);
YouTahDoug 0:d0eea54553ed 130
YouTahDoug 0:d0eea54553ed 131 fclose(fpnew);
YouTahDoug 0:d0eea54553ed 132 fclose(fpold);
YouTahDoug 0:d0eea54553ed 133
YouTahDoug 0:d0eea54553ed 134 fpnew = fopen(newfile, "r");
YouTahDoug 0:d0eea54553ed 135 if(fpnew == NULL) {
YouTahDoug 0:d0eea54553ed 136 retval = (-1);
YouTahDoug 0:d0eea54553ed 137 }
YouTahDoug 0:d0eea54553ed 138 return (retval);
YouTahDoug 0:d0eea54553ed 139 }