【发布时间】:2023-11-24 22:27:01
【问题描述】:
我在读取和保存 jpg 文件时遇到了一些问题。我想在客户端和服务器之间实现文件共享系统,我什至无法读取 jpg 并将其保存在同一进程中。这是我目前所拥有的
int main(int argc, const char * argv[])
{
char *buffer;
FILE *picture;
FILE *newPicture;
struct stat st;
long fileSize = 0;
picture = fopen("PATH/root/game-of-thrones-poster.jpg", "rb");
fstat(picture, &st);
fileSize = st.st_size;
if(fileSize > 0) {
buffer = malloc(fileSize);
if(read(picture, buffer, fileSize) < 0) {
printf("Error reading file");
}
fclose(picture);
newPicture = fopen("PATH/root/new.jpg", "wb");
write(newPicture, buffer, fileSize);
}
free(buffer);
}
当它尝试读取文件时,它告诉我 fileSize 为 0。
【问题讨论】:
-
如果
fopen返回NULL,你应该显示errno或者perror(或者使用strerror(errno));并且您还应该使用-Wall进行编译,因为您对fstat的使用是错误的(应该是fstat(fileno(picture),&st),并且您最好在之前调用memset(&st, 0, sizeof(st))....);顺便说一句,为什么使用read而不是fread? -
其实你的代码可能没有编译。
-
你应该启用警告(所以用
gcc -Wall -g编译),包括<stdio.h>和<sys/types.h>,<sys/stat.h>,<unistd.h>,我确定编译器会抱怨(即给出你应该解决的警告)。