/* * Example use of chdir(), ls(), mkdir(), and rmdir(). */ #include #include "SdFat.h" #include "sdios.h" // SD card chip select pin. const uint8_t chipSelect = SS; //------------------------------------------------------------------------------ // File system object. SdFat sd; // Directory file. SdFile root; // Use for file creation in folders. SdFile file; // Create a Serial output stream. ArduinoOutStream cout(Serial); // Buffer for Serial input. char cinBuf[40]; // Create a serial input stream. ArduinoInStream cin(Serial, cinBuf, sizeof(cinBuf)); //============================================================================== // Error messages stored in flash. #define error(msg) sd.errorHalt(F(msg)) //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); // Wait for USB Serial while (!Serial) { SysCall::yield(); } delay(1000); cout << F("Type any character to start\n"); // Wait for input line and discard. cin.readline(); cout << endl; // Initialize at the highest speed supported by the board that is // not over 50 MHz. Try a lower speed if SPI errors occur. if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) { sd.initErrorHalt(); } if (sd.exists("Folder1") || sd.exists("Folder1/file1.txt") || sd.exists("Folder1/File2.txt")) { error("Please remove existing Folder1, file1.txt, and File2.txt"); } int rootFileCount = 0; if (!root.open("/")) { error("open root failed"); } while (file.openNext(&root, O_RDONLY)) { if (!file.isHidden()) { rootFileCount++; } file.close(); if (rootFileCount > 10) { error("Too many files in root. Please use an empty SD."); } } if (rootFileCount) { cout << F("\nPlease use an empty SD for best results.\n\n"); delay(1000); } // Create a new folder. if (!sd.mkdir("Folder1")) { error("Create Folder1 failed"); } cout << F("Created Folder1\n"); // Create a file in Folder1 using a path. if (!file.open("Folder1/file1.txt", O_WRONLY | O_CREAT)) { error("create Folder1/file1.txt failed"); } file.close(); cout << F("Created Folder1/file1.txt\n"); // Change volume working directory to Folder1. if (!sd.chdir("Folder1")) { error("chdir failed for Folder1.\n"); } cout << F("chdir to Folder1\n"); // Create File2.txt in current directory. if (!file.open("File2.txt", O_WRONLY | O_CREAT)) { error("create File2.txt failed"); } file.close(); cout << F("Created File2.txt in current directory\n"); cout << F("\nList of files on the SD.\n"); sd.ls("/", LS_R); // Remove files from current directory. if (!sd.remove("file1.txt") || !sd.remove("File2.txt")) { error("remove failed"); } cout << F("\nfile1.txt and File2.txt removed.\n"); // Change current directory to root. if (!sd.chdir()) { error("chdir to root failed.\n"); } cout << F("\nList of files on the SD.\n"); sd.ls(LS_R); // Remove Folder1. if (!sd.rmdir("Folder1")) { error("rmdir for Folder1 failed\n"); } cout << F("\nFolder1 removed.\n"); cout << F("\nList of files on the SD.\n"); sd.ls(LS_R); cout << F("Done!\n"); } //------------------------------------------------------------------------------ // Nothing happens in loop. void loop() {}