2017-08-23 1 views
1

J'ai créé un fichier .mid en écrivant des octets dans un fichier et en l'enregistrant sous la forme .midi. Je peux l'exécuter et ça marche, mais il y a des cas spéciaux où ce n'est pas le cas.Création du fichier .mid: écrire un ' n' provoque ' r n' dans Windows

Si j'écris un octet contenant \n (ASCII 10) alors il sera au lieu d'écrire 2 octets \r\n, ce qui rend le .mid pas runnable. (Ceci est normal pour Windows machine à faire, mais pas souhaitable dans mon cas.) Un exemple d'écriture \n pourrait être lors de la sélection de la clé qui est représentée par \n.

Y at-il une solution de contournement pour écrire \n et non \r\n ou une autre façon de s'assurer que l'octet écrit est ASCII 10 sur un ordinateur Windows?

Merci!

+0

Quel code utilisez-vous pour écrire les octets? – edtheprogrammerguy

+2

il suffit d'ouvrir votre fichier en mode binaire 'fopen (" file.out "," wb ")' pour éviter la conversion de saut de ligne –

Répondre

4

Sur linux/unix, peu importe si vous spécifiez "wb" ou "w" pour créer un fichier.

Mais la création d'un fichier texte à l'aide fopen dans les fenêtres signifie que tous les \n sont convertis en \r\n, donc si vous utilisez cette option pour créer des fichiers binaires, les fichiers binaires sera « corrompu » s'il y a quelques octets avec la valeur " 10 "(saut de ligne)

Solution simple: utilisez toujours fopen("file.bin","wb") lors de la création d'un fichier binaire, sur toutes les plates-formes afin que votre code soit portable.