Stai tentando di scalare l'Everest con il fisico che fatica fare 2 piani di scale !
Le API ci sono tutte: dipende dalla piattaforma (Windows/Linux). Quindi basta andare a cercare nella documentazione corrispondente. Ad esempio per Windows c'e' l'MSDN.
A meno che tu non stia sviluppando un software che implementa un particolare filesystem, operazione alquanto complessa, anche per quelli con un saaaaacco di esperienza, avere un programma che ti permette di formattare uno storage (dischi, chiavetta, ecc) per un suo uso personale (semplicemente per vuotarne il contenuto)
non e' una buona idea.
Per prima cosa perche' il SO mette gia' a disposizione tutti gli strumenti per la formattazione, come seconda cosa perche' ci sono diversi parametri di formattazione che devono essere impostati e chi ha realizzato il software ha gia' identificato con opportuni default, ed infinie perche' difficilmente serve: l'utente usera' la chiavetta per un sacco di altre cose, oltre che per il tuo programma.
Se invece vuoi implementare un nuovo tipo di filesystem, allora auguri.
Se ci riesci, stai tranquillo che nel curriculum fara' un figurone.
Per fare una cosa del genere, pero', hai un bel po' da studiare:
1) almeno
http://www.amazon.com/Modern-Operating-Systems-3rd-Edition/dp/0136006639
2) studiare come sono implementati i filesystem ext2, ext3 di Linux
3) studiare come implementare i driver da installare sul SO per poter leggere il contenuto del disco
Per esempio puoi studiare i sorgenti di TrueCrypt, che implementa un filesystem cifrato.
Oppure come funzionano i filesystem di rete, e quelli distribuiti su rete geografica, ...
L'argomento e' vasto, e ho appena scalfito la superficie .
Anche progettare un software di backup e' alquanto complicato.
Ad esempio: sul backup c'e' un file e sul tuo disco no.
Cosa fai? Fai una copia o cancelli?
Lo lanci da linea di comando alla bisogna o parte in automatico?
Ovviamente dovra' essere qualcosa di piu' complicato di una copia ricorsiva, perche' altrimenti non ti serve niente di piu' delle primitive di festione dei file e delle directory messe a disposizione in qualunque linguaggio di programmazione.
Anzi, non ti serve neppure implementarlo, perche' basta un "copy /s *.* BACKUP" (o meglio ancora usare "robocopy")