Quando scrivi %APPDATA%\MioProgramma nel prompt dei comandi, cmd.exe prima di farci qualunque cosa espande le variabili d'ambiente (nello specifico APPDATA), costruendo così il percorso "vero" (tipicamente qualcosa del tipo c:\Users\nomeutente\AppData\Roaming); questa operazione non viene fatta da praticamente nessuna funzione/classe che opera su percorsi in C/C++, per cui ofstream crede di dover creare il file in una cartella che si chiama letteralmente "%APPDATA%" (che non esiste, per cui ottieni l'errore).
Quello che devi fare è espandere "manualmente" la variabile d'ambiente appdata e costruire il percorso di conseguenza; quindi:
codice:std::string appData = getenv("appdata"); std::string myDir = appData + "\\NomeProgramma"; CreateDirectory(myDir.c_str(), NULL); ofstream f((myDir + "\\documento.txt").c_str()); ...