0

cを使用して、Windowsディレクトリの内容をファイルに書き込もうとしています。たとえば、jpeg のディレクトリ (つまり、複数の jpeg を含むディレクトリ) があり、それらを .raw ファイルに変換したい場合、次のようなものがあります。

#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>

typedef uint8_t BYTE;

#define BLOCK 512*sizeof(BYTE);

int main(void)
{
    FILE * fd = fopen("C:\\jpegs", "r");
    if (fd == NULL) {
        fprintf(stderr, "Error opening device file.\n");
        return EXIT_FAILURE;
    }
    int block = BLOCK;
    FILE * fn = fopen("new.raw", "w+");
    void * buff = malloc(block);
    while(feof(fd) == 0) {
        fread(buff,block,1,fd);
        fwrite(buff,block,1,fn);
    }
    free(buff);
    fclose(fd);
    fclose(fn);
    return 0;
}

問題は、Windows ディレクトリが EOF で終了しているとは思わないことです。これを解決する方法について誰かアイデアがありますか?

4

1 に答える 1

1

opendir()Unix システムでは、読み取り用にディレクトリを開くことはできますが、, readdir(),closedir()ファミリーの呼び出しを使用しない限り、ディレクトリから実際に読み取ることはできません。Unix のディレクトリに書き込むことはできません。スーパーユーザー (root) でもそれはできません。(ディレクトリを開く主な理由は、通常はopen()よりもfopen()を使用して、開始した場所に戻るために を使用したり、 などのさまざまなchdir()機能を使用してディレクトリを参照したりできるようにするためです。)fchdir()*at()openat()

Windows では、少なくとも"rb"mode を使用する必要がありますが、率直に言って、mode で多くのことができるとは思いません。opendir()Windows API にはおそらく Unix 関数に類似したものがあり、代わりにそれらを使用する必要があります。

于 2013-05-15T20:43:12.200 に答える