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
- Committer:
- YouTahDoug
- Date:
- 2011-06-21
- Revision:
- 0:d0eea54553ed
- Child:
- 1:4a0985d3a848
File content as of revision 0:d0eea54553ed:
// example writing to SD card, sford // Modified 21 June 2011 by D. Wendelboe to test SD file and directory creation. // Two procedures were added. One to renam a file (via copy), and a procedure to // copy a file. #include "mbed.h" #include "SDFileSystem.h" SDFileSystem sd(p5, p6, p7, p8, "sd"); int file_rename(const char *oldfile, const char *newfile); int file_copy(const char *oldfile, const char *newfile); int main() { int i, status; printf("Hello World!\n"); mkdir("/sd/mydir1", 0777); mkdir("/sd/mydir2", 0777); mkdir("/sd/mydir3", 0777); //-------------------------------------------------------------- FILE *fp = fopen("/sd/mydir1/sdtest.txt", "w"); if(fp == NULL) { error("Could not open file for write\n"); } fprintf(fp, "Hello SD Card World!\n"); for (i=0; i<10; i++) { fprintf(fp, "Line #%i\n", i); } fclose(fp); //-------------------------------------------------------------- printf("Open directory on /sd\n"); DIR *d = opendir("/sd"); struct dirent *p; while((p = readdir(d)) != NULL) { printf("%s\n", p->d_name); } closedir(d); printf("Directory closed\n"); //-------------------------------------------------------------- printf("Remove /sd/mydir3\n"); remove("/sd/mydir3"); //-------------------------------------------------------------- printf("Rename sdtest.txt to doug.txt\n"); status = file_rename("/sd/mydir1/sdtest.txt", "/sd/mydir1/doug.txt"); if (status == -1) printf("Error: New file not created: %d\n", status); else printf("New file was created: %d\n", status); //-------------------------------------------------------------- status = file_copy("/sd/mydir1/doug.txt", "/sd/mydir1/doug2.txt"); if (status == -1) printf("Error: file not copied: %d\n", status); else printf("Success: file copied: %d\n", status); //-------------------------------------------------------------- fp = fopen("/sd/mydir2/sdtest2.txt", "w"); if(fp == NULL) { error("Could not open file for write\n"); } fprintf(fp, "This is a second directory.\n"); for (i=0; i<10; i++) { fprintf(fp, "Line #%C\n", i+'a'); } fclose(fp); printf("Goodbye World!\n"); } //*********************************************************** // file_rename: renames a file. // Kind of hoakey as it moves data instead of adjusting // the file name in the directory. // Checks to insure the file was renamed. // Returns -1 = error; 0 = success //*********************************************************** int file_rename(const char *oldfile, const char *newfile) { int retval = 0; int ch; FILE *fpold = fopen(oldfile, "r"); FILE *fpnew = fopen(newfile, "w"); while (1) { ch = fgetc(fpold); if (ch == EOF) break; fputc(ch, fpnew); } fclose(fpnew); fclose(fpold); fpnew = fopen(newfile, "r"); if(fpnew == NULL) { retval = (-1); } else { remove(oldfile); } return (retval); } //*********************************************************** // file_copy: Copies a file // Checks to insure destination file was created. // Returns -1 = error; 0 = success //*********************************************************** int file_copy(const char *oldfile, const char *newfile) { int retval = 0; int ch; FILE *fpold = fopen(oldfile, "r"); FILE *fpnew = fopen(newfile, "w"); while (1) { ch = fgetc(fpold); if (ch == EOF) break; fputc(ch, fpnew); } fclose(fpnew); fclose(fpold); fclose(fpnew); fclose(fpold); fpnew = fopen(newfile, "r"); if(fpnew == NULL) { retval = (-1); } return (retval); }