1

C でディスク イメージのボリューム ラベルを取得しようとして奇妙な時間を過ごしています。FAT12 ディスクの場合、この情報はオフセット 0x2b または 10 進数で 43 にあり、長さは 11 バイトであることを理解しています。とにかく、ここに私のコードがあります:

void main(int argc, char *argv[]) {
    ...
    FILE *fp = fopen(argv[1], "rb");
    printf("Volume Label: %s\n", seekData(fp, 43, 11));
    ...
}

unsigned char* seekData(FILE *fp, int offset, int bytes) {
    unsigned char* buff = malloc(sizeof(unsigned char)*bytes);
    fseek(fp, offset, SEEK_SET);
    fread(buff, 1, bytes, fp);
    rewind(fp);
    return buff;
}

私が使用する入力ファイル (.IMA) については、常に20 20 20 20 20 20 20 20 20 20 2016 進数に戻ります。またはVolume Label:(nothing here)、上記のコードが実行されたときだけです。ここで非常に明白な何かが欠けていますか?任意の助けをいただければ幸いです

4

1 に答える 1

1

だから私は問題を見つけました。ボリューム ラベルは前述の場所に保存されていないようで、通常はルート ディレクトリに特別なファイルとして配置されています。

ソース: http://www.ntfs.com/fat-partition-sector.htm

「ボリューム ラベル。このフィールドはボリューム ラベルを保存するために使用されていましたが、現在、ボリューム ラベルはルート ディレクトリに特別なファイルとして保存されています。」

于 2016-11-21T00:27:27.200 に答える