⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8-2-20.c

📁 2005软件工程师考试下午编程题源代码
💻 C
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/

#include <stdio.h>
#include <string.h>
typedef struct{
char fname[256];
long length;
long offset;
}FileInfo;

void copyfile( FILE *fin, FILE *fout, int fsiz){
char buf[1024]; int siz = 1024;
    		while(fsiz != 0) { /*每次复制siz个字节,直至复制完fsiz个字节*/
        		if ( siz > fsiz) siz = fsiz; 
        		fread( buf, 1, siz, fin ) ; fwrite( buf, 1, siz, fout );
        		fsiz = fsiz-siz;
    		}
}

int dofile( FILE *fin, FileInfo *inp ){
long offset;
    		FILE *fout;
    		if ( ( fout = fopen( inp->fname, "wb" ) ) == NULL) {
        		printf ( "创建文件错误: %s\n", inp->fname );
       		return 1;
    		}
    		offset = ftell(fin); /*保留合并文件读/写位置*/
    		fseek(fin,inp->offset, SEEK_SET); /*定位于被恢复文件首*/
    		copyfile( fin, fout, inp ->length );
    		fclose( fout );
    		printf( "\n---文件名: %\n 文件长: %1d.\n ", inp->fname, inp->length );
    		fseek(fin ,offset, SEEK_SET);     /*恢复合并文件读/写位置*/
    		return 0;
}

int main( int argc ,char *argv[ ] ){
FileInfo finfo;
    		char fname[256] ; FILE *fcmbn;
   		 if (argc < 2) { 
printf( "输入合并文件名:" ) ; scanf( "%s", fname );
}
    		else strcpy( fname,argv[1]);
    		if ( ( fcmbn = fopen( fname, "rb" ) ) == NULL) {
        		printf( "文件打开错误:%s\n", fname ); return 1;
    		}
    		fseek( fcmbn,-sizeof(FileInfo),SEEK_END);/*定位于合并文件末尾的标志信息*/
    		fread(&finfo,1,sizeof(FileInfo),fcmbn);
    		if ( finfo.length !=0 || strcmp( finfo.fname, "CombinedFile" ) ) {
        		printf( "指定的文件不是合法的合并文件\n" );
        		fclose( fcmbn ); return 2;
    		}
    		fseek(fcmbn,finfo.offset,SEEK_SET );/*定位于首个原始文件的控制信息*/
   		for ( ; ; ) { /*恢复一个(argc > 2) 或全部 ( argc = 2 )原始文件*/
        		fread( &finfo, 1, sizeof( FileInfo ), fcmbn ) ;
        		if ( finfo.length == 0 ) break ;
        		if ( argc > 2 && strcmp( finfo.fname, argv[2] ) ) continue ;
        		if ( dofile( fcmbn, &finfo ) != 0 ) break ;
    		}
    		fclose( fcmbn ) ; return 0 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -