将mid文件作为二进制文件读取,以便进一步分析

时间:2016-02-27 20:29:31

标签: c file filereader readfile

所以我正在尝试创建一个程序来读取中间文件并输出节点和txt文件中节点之间的延迟以供进一步使用。但是,我遇到了一些问题。每当我尝试阅读mid文件时,它只会给我随机字符。但是我找不到任何问题的解决方案。即使用二进制标记读取文件也不起作用。

#include <stdio.h>
#include <windows.h>

int main (){
    FILE *midi = fopen("myfile.mid","rb"); 
    FILE *txt = fopen("myfile.txt", "w"); 
    char line[40];

    if (midi==NULL)
    {
        printf("Error");
        fclose(midi);
        fclose(txt);
        return 1;
    }

    while(!feof(midi)) 
    {
        fgets(line, 40, midi);
        printf("%s\n",line);
        fputs(line, txt);
        Sleep(300);
    }

    fclose(midi);
    fclose(txt);
    return 0;
}

编辑:所以我尝试使用fread和fwrite代替,但它仍然提供med“随机”符号。我刚用这段代码替换了while循环:

fread(line, 1, 40, midi); 
fwrite(line, 1, 40, txt);

1 个答案:

答案 0 :(得分:2)

这不是因为&#34; Windows如何读取文件&#34;,因为MIDI文件不是人类可读的。它不是文本文件,而是二进制格式,使机器能够高效读取。将它作为一个字符串处理并将其打印到屏幕上并不会产生任何有意义的信息。

如果您想在程序中处理MIDI数据,最简单的方法是在线查找MIDI解析库。文件格式并不是很复杂,所以如果你感觉有点倾向,你也可以手工解析它(这对于二进制解析来说是一个很好的学习练习)。你需要的唯一C函数是fread将它读入char缓冲区 - 其余的只是循环和数学。