As tu ajouté le 0 de fin de chaine ?
wchar_t tab[300];
int i;
i = fread(tab, sizeof(wchar_t), 300, file);
tab[i] = 0;
Pour écrire dans un fichier, c'est, tout simplement, fwrite qui fonctionne comme fread.
fwrite(buffer, taille_dun_element, nombre_delements_a_ecrire, flux);
wprintf sert à écrire des chaines unicode à la console. C'est probablement ce qu'il te faut pour afficher.
Au passage, fread, fwrite et ce genre de fonctions se fout complètement du type d'encodage des caractères voir même du type de donnée.
Ces fonctions servent à lire et écrire des données binaires (qui peuvent très bien être des chaines de caractère Unicode ou encore un tableau de int).
Aucune conversion, traitement ou quoi que ce soit n'est effectué par ces fonctions. Tout est écrit (ou lu) en brute.
C++ (@++)