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.
main.cpp@0:d0eea54553ed, 2011-06-21 (annotated)
- Committer:
- YouTahDoug
- Date:
- Tue Jun 21 22:59:02 2011 +0000
- Revision:
- 0:d0eea54553ed
- Child:
- 1:4a0985d3a848
Who changed what in which revision?
User | Revision | Line number | New 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 | } |