72 fp = fopen(file, "r");//如果此处file为文本文件,读取就没有问题,如果是tar包,就会上传空的文件上去 73 if (fp == NULL) { 74 printf("file open fail!\n"); 75 return -1; 76 } 77 fd = fileno(fp); 78 fstat(fd, &theStat); 79 80 if (theStat.st_size > length) { 81 printf("file is too big!\n"); 82 fclose(fp); 83 return -1; 84 } 85 readCnt = fread(buf, 1, theStat.st_size, fp); 86 if (readCnt < theStat.st_size ){ 87 printf("lose some.%d %d\n", readCnt,(int)theStat.st_size); 88 fclose(fp); 89 return -1; 90 } |
49 int dev_getconfigfile(char *buf, int length, int *pflen) 50 { 51 int readCnt = 0; 52 FILE *fp; 53 int fd; 54 struct stat theStat; 55 char filename[128]; 56 strcpy(filename, CONFFILES_NAME); 57 fp = fopen(filename, "r"); 58 if (fp == NULL) { 59 printf("file open fail!\n"); 60 return -1; 61 } 62 fd = fileno(fp); 63 fstat(fd, &theStat); 64 65 if (theStat.st_size > length) { 66 printf("file is too big!\n"); 67 fclose(fp); 68 return -1; 69 } 70 71 readCnt = fread(buf, 1, theStat.st_size, fp); 72 if (readCnt < theStat.st_size ){ 73 printf("lose some.%d %d\n", readCnt,(int)theStat.st_size); 74 fclose(fp); 75 return -1; 76 } 77 fclose(fp); 78 *pflen = theStat.st_size; 79 return 0; 80 } |
原帖由 WHITLACK 于 2008-12-23 21:38 发表
将本地的几个文件上传到服务器上,
不知道可以用什么办法?
我想到的是用先将几个文件打包,然后fread
可是现在有个问题是,fread读取文本文件是可以的,
我用tar打包后,使用fread,上传到服务器上的 ...
fp = fopen(file, "r");//如果此处file为文本文件,读取就没有问题,如果是tar包,就会上传空的文件上去 if (fp == NULL) { printf("file open fail!\n"); return -1; } fd = fileno(fp); fstat(fd, &theStat); if (theStat.st_size > length) { printf("file is too big!\n"); fclose(fp); return -1; } int liSize = 0; while(liSize < theStat.st_size) { readCnt = fread(buf + liSize, 1, 1024, fp); liSize += 1024; } if (readCnt < theStat.st_size ){ printf("lose some.%d %d\n", readCnt,(int)theStat.st_size); fclose(fp); return -1; } |
原帖由 WHITLACK 于 2008-12-23 21:38 发表
将本地的几个文件上传到服务器上,
不知道可以用什么办法?
我想到的是用先将几个文件打包,然后fread
可是现在有个问题是,fread读取文本文件是可以的,
我用tar打包后,使用fread,上传到服务器上的 ...
fp = fopen(file, "r");//如果此处file为文本文件,读取就没有问题,如果是tar包,就会上传空的文件上去 if (fp == NULL) { printf("file open fail!\n"); return -1; } fd = fileno(fp); fstat(fd, &theStat); if (theStat.st_size > length) { printf("file is too big!\n"); fclose(fp); return -1; } int liSize = 0; while(liSize < theStat.st_size) { readCnt = fread(buf + liSize, 1, 1024, fp); liSize += 1024; } if (readCnt < theStat.st_size ){ printf("lose some.%d %d\n", readCnt,(int)theStat.st_size); fclose(fp); return -1; } |
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define CONFFILES_NAME "test.tar" int dev_getconfigfile(char *buf, int length, int *pflen) { int readCnt = 0; FILE *fp; int fd; struct stat theStat; char filename[128]; strcpy(filename, CONFFILES_NAME); fp = fopen(filename, "r"); if (fp == NULL) { printf("file open fail!\n"); return -1; } fd = fileno(fp); fstat(fd, &theStat); if (theStat.st_size > length) { printf("file is too big!\n"); fclose(fp); return -1; } readCnt = fread(buf, 1, theStat.st_size, fp); if (readCnt < theStat.st_size ){ printf("lose some.%d %d\n", readCnt,(int)theStat.st_size); fclose(fp); return -1; } fclose(fp); *pflen = theStat.st_size; return 0; } int main() { char buf[102400]; int pflen; int rs = dev_getconfigfile(buf, 102400, &pflen); printf("rs = %d\n", rs); printf("pflen = %d\n", pflen); int i; for (i = 0; i < pflen; i++) { printf("%c", buf[i]); } } |
fp = fopen(file, "r");//如果此处file为文本文件,读取就没有问题,如果是tar包,就会上传空的文件上去 if (fp == NULL) { printf("file open fail!\n"); return -1; } fd = fileno(fp); fstat(fd, &theStat); if (theStat.st_size > length) { printf("file is too big!\n"); fclose(fp); return -1; } int liSize = 0;//buf的大小必须大于1024 while(liSize < theStat.st_size) { readCnt = fread(buf + liSize, 1, 1024, fp); liSize += 1024; }//这种是最安全的读取方法 if (readCnt < theStat.st_size ){ printf("lose some.%d %d\n", readCnt,(int)theStat.st_size); fclose(fp); return -1; } |
原帖由 chary8088 于 2008-12-24 10:04 发表
因为fread 或者read函数读取数据时遇到'\0', 0, 文件结束符都会返回的,所以必须强制它读取到文件的结尾,特别是读取二进制文件
原帖由 WHITLACK 于 2008-12-24 17:07 发表
chary8088 兄,按照您的方法,服务器端仍然会提示上传失败
to LS各位兄弟:
会不会是因为服务器端是将buf当做字符串进行处理的,因此上传失败?
需要将buf转换为字符型吗?如果需要 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |