Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:如何从文件中读取jpg并保存它?_C_File_Download_Jpeg - Fatal编程技术网

C:如何从文件中读取jpg并保存它?

C:如何从文件中读取jpg并保存它?,c,file,download,jpeg,C,File,Download,Jpeg,我在读取和保存jpg文件时遇到一些问题。我想在客户端和服务器之间实现一个文件共享系统,但我甚至无法读取jpg并将其保存在同一进程中。这是我到目前为止所拥有的 int main(int argc, const char * argv[]) { char *buffer; FILE *picture; FILE *newPicture; struct stat st; long fileSize = 0; picture = fopen("PATH

我在读取和保存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);
}
int main(int argc,const char*argv[]
{
字符*缓冲区;
文件*图片;
文件*新图片;
结构统计;
长文件大小=0;
picture=fopen(“路径/根/权力游戏海报.jpg”,“rb”);
fstat(图片和st);
fileSize=st.st\u size;
如果(文件大小>0){
buffer=malloc(文件大小);
如果(读取(图片、缓冲区、文件大小)<0){
printf(“读取文件时出错”);
}
fclose(图片);
newPicture=fopen(“PATH/root/new.jpg”、“wb”);
写入(新图片、缓冲区、文件大小);
}
自由(缓冲);
}
当它试图读取文件时,它告诉我fileSize为0

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

您正在传递
文件*
fstat
需要
int

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


您正在传递
文件*
fstat
需要一个
int

如果
fopen
返回NULL,您应该显示
errno
,可能使用
perror
(或使用
strerror(errno)
);您还应该使用
-Wall
进行编译,因为您使用的
fstat
是错误的(应该是
fstat(fileno(picture),&st)
,您最好在….之前调用
memset(&st,0,sizeof(st))
;顺便问一下,为什么要使用
read
而不是
fread
?实际上,您的代码可能无法编译。您应该启用警告(因此使用
gcc-Wall-g
编译),并包括
,我确信编译器会抱怨(即发出警告,您应该解决)。如果
fopen
返回NULL,则应使用
perror
(或使用
strerror(errno)
)显示
errno
;您还应该使用
-Wall
进行编译,因为您使用的
fstat
是错误的(应该是
fstat(fileno(picture),&st)
,您最好在….之前调用
memset(&st,0,sizeof(st))
;顺便问一下,为什么要使用
read
而不是
fread
?实际上,您的代码可能无法编译。您应该启用警告(因此使用
gcc-Wall-g
编译),并包括
,我确信编译器会抱怨(即发出警告,您应该解决).我是C新手,我认为fstat需要一个文件描述符?文件描述符是由
open
给出的整数。但是
fopen
返回一个
文件
句柄(不一样,是指针)。我是C新手,我认为fstat需要一个文件描述符?文件描述符是由
open
给出的整数。但是
fopen
返回一个
文件
句柄(它不同,是一个指针)。