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

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);
}