Si nous partons du principe que par le texte que vous entendez ASCII et non UTF-8, vous pouvez le faire en lisant chaque personnage et en utilisant isascii()
et isspace()
pour vérifier si elle est un caractère valide:
void is_text(char *filename) {
FILE *f = fopen(filename, "r");
if (!f) {
perror("fopen failed");
return;
}
int c;
while ((c=fgetc(c) != EOF) {
if ((!isascii(c) || iscntrl(c)) && !isspace(c)) {
printf("is binary\n");
fclose(f);
return;
}
}
printf("is text\n");
fclose(f);
}
Si la fichier contient des caractères UTF-8, il devient plus compliqué que vous devez regarder plusieurs octets à la fois et voir si elles sont des séquences d'octets UTF-8 valides. Il y a aussi la question de savoir quels points de code Unicode sont considérés comme du texte.
Cela dépend de votre définition de binaire. Vérifiez chaque octet dans le fichier isalphanum() ou juste s'il y en a> 127? –
Tous les fichiers sont binaires. MS a la distinction en raison des fins de ligne –
Vérification de la fin du fichier ne fera pas l'affaire? Alternativement, vous pouvez vérifier les octets pour la gamme ASCII de caractères imprimables. – Tob