0

我正在尝试使用 c 将 windows 目录的内容写入文件。例如,如果我有一个 jpegs 目录(即一个包含多个 jpegs 的目录)并且想将它们转换为 .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

在 Unix 系统上,尽管您可以打开一个目录进行读取,但您不能真正从中读取,除非您使用opendir(), readdir(),closedir()系列调用。您不能写入 Unix 上的目录;即使是超级用户(root)也不能这样做。(打开目录的主要原因,通常使用open()than fopen(),是为了让您可以使用chdir()followfchdir()回到您开始的位置,或使用各种*at()功能,例如openat(),来引用目录。)

在 Windows 上,您至少需要使用"rb"模式,但坦率地说,我不希望您能够用它做很多事情。Windows API中可能有与 Unix 函数类似的opendir()函数,您应该使用这些函数。

于 2013-05-15T20:43:12.200 回答