在c中打开一个用于读/写的Windows文件目录

时间:2013-05-15 20:36:46

标签: c windows memory

我正在尝试使用c将Windows目录的内容写入文件。例如,如果我有一个jpegs目录(即一个包含多个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终止的。有没有人对如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:1)

在Unix系统上,虽然您可以打开一个目录进行阅读,但除非您使用opendir()readdir()closedir()系列调用,否则无法真正阅读该目录。你不能写到Unix上的目录;即使是超级用户(root)也无法做到这一点。 (打开目录的主要原因通常是open()而不是fopen(),这样您就可以使用chdir()后跟fchdir()返回到您开始的位置,或使用各种*at()函数(例如openat())来引用目录。)

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