【问题标题】:C: How to read a jpg from a file and save it?C: 如何从文件中读取 jpg 并保存?
【发布时间】: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),&amp;st),并且您最好在之前调用memset(&amp;st, 0, sizeof(st))....);顺便说一句,为什么使用 read 而不是 fread
  • 其实你的代码可能没有编译。
  • 你应该启用警告(所以用gcc -Wall -g编译),包括&lt;stdio.h&gt;&lt;sys/types.h&gt;&lt;sys/stat.h&gt;&lt;unistd.h&gt;,我确定编译器会抱怨(即给出你应该解决的警告)。

标签: c file download jpeg


【解决方案1】:

fstat() 与 stat() 相同,只是要统计的文件是 由文件描述符 fd 指定。

您正在传递 FILE *fstat 期望 int

【讨论】:

  • 我是 C 新手,我认为 fstat 需要文件描述符?
  • 文件描述符是由open 给出的整数。但是fopen返回一个FILE句柄(不一样,是一个指针)。