我正在尝试使用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终止的。有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:1)
在Unix系统上,虽然您可以打开一个目录进行阅读,但除非您使用opendir()
,readdir()
,closedir()
系列调用,否则无法真正阅读该目录。你不能写到Unix上的目录;即使是超级用户(root)也无法做到这一点。 (打开目录的主要原因通常是open()
而不是fopen()
,这样您就可以使用chdir()
后跟fchdir()
返回到您开始的位置,或使用各种*at()
函数(例如openat()
)来引用目录。)
在Windows上,您至少需要使用"rb"
模式,但坦率地说,我不希望您能够使用它做很多事情。可能与Windows API中的Unix opendir()
函数类似,您应该使用它们。