Nem tudom mi a görcs tárgya. Csinálsz egyetlen brutál nagy fájlt, amiben szép sorban egymás után leteszed a wav-okat.
De mielőtt leraknád, megcsinálod a katalógust és innentől csak pointerművelet.
struct wav {
char azonosito[MAXHOSSZ];
size_t kezdete;
// size_t hossza; -- ez végülis elhagyható, hiszen a következő kezdetéből tudod, egymás után vannak rakva.
} leiro[MAXDARABSZAM];
Aztán ez mögé jöhet a sok-sok wav.
Itt tényleg nincs jogosultságkezelés meg semmi, hiszen ez az egyetlen brutál nagy fájl folyamatosan nyitva van, csak a fseek() és a fread() megy. Jobb esetben pedig mmap() és simán RAM címzéssel kardozol benne.