user-0 提问: 我写的数据压缩软件 wzip

回复:
user: user-1
content: 引用 16 楼 goldbeef 的回复:引用 14 楼 Symfund 的回复:真的没必要实现压缩算法的软件，只要将算法原理发布出来就可以了，看看arxiv上的大牛都是这样的！我要发论文的，你得和已有的压缩软件比较啊，才能得出数据 无profiler不要谈效率！！ 尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-0
content: 引用 14 楼 Symfund 的回复:真的没必要实现压缩算法的软件，只要将算法原理发布出来就可以了，看看arxiv上的大牛都是这样的！我要发论文的，你得和已有的压缩软件比较啊，才能得出数据

user: user-2
content: 好家伙  顶个贴

user: user-3
content: 真的没必要实现压缩算法的软件，只要将算法原理发布出来就可以了，看看arxiv上的大牛都是这样的！

user: user-3
content: 建议将”你的“新的压缩算法发布在arxiv.org上哈！

user: user-4
content: 这么牛X  PS: 听说一天回个贴可以得10分

user: user-1
content: 参考_lseeki64函数。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:引用 6 楼 goldbeef 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 支持一下校友！多谢赵老师，您也是计算机学院的？ 提醒：一个新的压缩解压软件首先要兼容解压流行的压缩文件格式如.rar,.7z,.zip,.iso,.cab,……，然后能压缩为自己独特的压缩格式，且压缩比大于流行的压缩文件格式。还要支持超大文件压缩解压，支持跨流行的几种操作系统、文件系统的压缩解压。[/quote] 恩，赵老师说的很全面，thanks。目前的压缩上限应该是4G，32位下写的。 目前忙着写论文，9月份要投。等空闲了，在好好整一整。

user: user-1
content: 引用 6 楼 goldbeef 的回复:引用 5 楼 zhao4zhong1 的回复:支持一下校友！多谢赵老师，您也是计算机学院的？ 提醒：一个新的压缩解压软件首先要兼容解压流行的压缩文件格式如.rar,.7z,.zip,.iso,.cab,……，然后能压缩为自己独特的压缩格式，且压缩比大于流行的压缩文件格式。还要支持超大文件压缩解压，支持跨流行的几种操作系统、文件系统的压缩解压。

user: user-5

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:支持一下校友！多谢赵老师，您也是计算机学院的？

user: user-1
content: 支持一下校友！

user: user-6
content: 学习了，

user: user-7
content: 接分要六个字

user: user-8

user: user-9

user: user-1
content: 再供参考（支持大于4GB的文件） #include <sys\stat.h> #include <io.h> #include <fcntl.h> #include <share.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #define MAX_CLU_BYTES 65536 FILE *fo; int fh; __int64 offs,offs1; __int64 rvi64; int rv,wrv; unsigned char buf[MAX_CLU_BYTES]; char ofn[_MAX_PATH]; char offstr[80]; void strcpybutcomma(char *t,char *s) {     char c;      while (1) {         c = *s++;         if (','!=c) *t++ = c;         if (0==c) break;     } } void main(int argc,char **argv) {     if (argc<3) {         printf("Copy File Tail.\n");         printf("Usage:\n");         printf("    cft filename.ext offset_begin[-offset_end]\n");         printf("Copy filename.ext offset_begin[-offset_end] to offset_begin[-offset_end]-filename.ext\n");         printf("Note: Byte at offset_end is NOT included.\n");         printf("Example:\n");         printf("    cft abc.rar 12345\n");         printf("Copy abc.rar offset 12345-end to 12345-abc.rar\n");         printf("    cft abc.rar 123-12345\n");         printf("Copy abc.rar offset 123-12345 to 123-12345-abc.rar\n");         printf("    cft abc.rar 0xAB-0xCD\n");         printf("Copy abc.rar offset 0xAB-0xCD to 0xAB-0xCD-abc.rar\n");         return;     }     strcpybutcomma(offstr,argv[2]);     rv=sscanf(offstr,"%I64i-%I64i",&offs,&offs1);     if (rv==0) {         printf("offset %s is not number\n",argv[2]);         return;     }     fh=_sopen(argv[1],_O_BINARY|_O_RDONLY|_O_RANDOM,_SH_DENYNO);     if (fh==-1) {         printf("_sopen %s errno=%d\n",argv[1],errno);         return;     }     if (rv==1) {         offs1=_filelengthi64(fh);         if (offs1==-1i64) {             printf("%I64=_filelengthi64 errno=%d\n",offs1,errno);             _close(fh);             return;         }     } else {//rv==2         if (offs1<offs) {             printf("%s offset_begin>offset_end error\n",argv[2]);             _close(fh);             return;         }     }     rvi64=_lseeki64(fh,offs,SEEK_SET);     if (rvi64!=offs) {         printf("%I64u=_lseeki64 %I64u errno=%d\n",rvi64,offs,errno);         _close(fh);         return;     }     sprintf(ofn,"%s-",offstr);     strcat(ofn,argv[1]);     fo=fopen(ofn,"wb");     if (fo==NULL) {         _close(fh);         printf("fopen %s error\n",ofn);         return;     }     cprintf("\n%I64u\r",offs);     while (1) {         rv=_read(fh,buf,(unsigned int)__min(offs1-offs,MAX_CLU_BYTES));         if (rv==0) break;//         if (rv<0) {             fclose(fo);             _close(fh);             printf("_read %s offset %I64u error\n",argv[1],offs);             return;         }         wrv=fwrite(buf,1,rv,fo);         if (wrv!=rv) {             fclose(fo);             _close(fh);             printf("fwrite %s error\n",ofn);             return;         } else {             offs+=rv;             cprintf("%I64u\r",offs);             if (offs>=offs1) break;//         }     }     fclose(fo);     _close(fh);     printf("Copy %s offset %s to %s OK.\n",argv[1],argv[2],ofn); }