92
社区成员




#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *f;
char ln[64+1];//Because sscanf(argv[66],"%hx",&ln[66-3]); modify ln[63] and ln[64] !
int i;
__int64 hexoffset64;
void main(int argc,char *argv[]) {
if (argc<=3) {
cprintf("Locate & Replace, designed by zhao4zhong1@163.com\n\r");
HELP:
cprintf("Usage: LR filename.ext hexoffset64 byte1 byte2 byte3 ...");
return;
}
if (argc>64+3) {
cprintf("Up to 64 bytes\a");
return;
}
if ((f=fopen(argv[1],"r+b"))==NULL) {
cprintf("Can not open %s\a",argv[1]);
return;
}
if (1!=sscanf(argv[2],"%I64x",&hexoffset64)) {fclose(f);goto HELP;}
if (hexoffset64>=_filelengthi64(_fileno(f))) {
cprintf("hexoffset64==%016I64x >= %016I64x==_filelengthi64 of file %s\a",hexoffset64,_filelengthi64(_fileno(f)),argv[1]);
fclose(f);
return;
}
for (i=3;i<argc;i++) {
if (1!=sscanf(argv[i],"%hx",&ln[i-3])) {fclose(f);goto HELP;}
}
if (hexoffset64!=_lseeki64(_fileno(f),hexoffset64,SEEK_SET)) {
cprintf("_lseeki64 to %I64x fail\a",hexoffset64);
fclose(f);
return;
}
if ((int)fwrite(ln,1,argc-3,f)!=argc-3) {
cprintf("fwrite %d bytes fail\a",argc-3);
fclose(f);
return;
}
fclose(f);
}
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 40
#define MAX2N 80
FILE *fi,*fo;
char sn[_MAX_PATH],dn[_MAX_PATH],f[MAX2N],bw[MAXN],bf[MAXN+sizeof(int)-1],bx[MAXN],br[MAXN+sizeof(int)-1],bb[MAXN];
char *ag[MAXN];
int L,i,j,k,lenf,lenr,find,match;
__int64 off;
void FR() {
printf("\n");
printf("Src : %s\n",sn);
if (find==0) {
printf("Dest: %s\n",dn);
}
for (i=0;i<lenf;i++) {
bb[i]=fgetc(fi);
}
off=0i64;
while (1) {
match=1;
for (j=0;j<lenf;j++) {
if (bw[j]==0&&bf[j]==bb[j]) continue;
if (bw[j]==1) continue;
match=0;
break;//
}
if (match==1) {
printf("%016I64X\n",off);
if (find==0) {
for (j=0;j<lenf;j++) {
if (bx[j]==0) fputc(br[j],fo);
else fputc(bb[j],fo);
}
}
for (i=0;i<lenf;i++) {
bb[i]=fgetc(fi);
if (feof(fi)) break;//
}
if (feof(fi)&&find==0) {
for (j=0;j<i;j++) fputc(bb[j],fo);
break;//
}
if (feof(fi)) break;//
else off+=(__int64)lenf;
} else {
if (find==0) {
fputc(bb[0],fo);
}
memmove(bb,bb+1,lenf-1);
bb[lenf-1]=fgetc(fi);
off++;
if (feof(fi)) {
if (find==0) {
for (j=0;j<lenf-1;j++) fputc(bb[j],fo);
}
break;//
}
}
}
}
int main() {
while (1) {
printf("Find & Replace, designed by zhao4zhong1@163.com\n");
printf("Src file name:");
fflush(stdout);
fgets(sn,_MAX_PATH,stdin);
if ('\n'==sn[0]) break;//
L=strlen(sn);if ('\n'==sn[L-1]) sn[L-1]=0;
if ((fi=fopen(sn,"rb"))==NULL) {
printf("Can not open %s!",sn);
break;//
}
while (1) {
printf("Dest file name:");
fflush(stdout);
fgets(dn,_MAX_PATH,stdin);
if ('\n'==dn[0]) break;//
L=strlen(dn);if ('\n'==dn[L-1]) dn[L-1]=0;
if (strcmpi(sn,dn)==0) printf("Error: Src file name[%s] == Dest file name[%s]!\n",sn,dn);
else if ((fo=fopen(dn,"rb"))!=NULL) {
fclose(fo);
printf("Error: Dest file already exists!\n");
} else break;//
}
printf("Find :");
fflush(stdout);
fgets(f,MAX2N,stdin);
L=strlen(f);if ('\n'==f[L-1]) f[L-1]=0;
if (f[0]=='\'') {
lenf=strlen(f)-1;
for (j=0;j<lenf;j++) {
if (f[j+1]=='?') bw[j]=1;
else {
bw[j]=0;
bf[j]=f[j+1];
}
}
} else {
i=0;
for (j=0;j<MAXN;j++) {
if (f[i]==0x0D||f[i]==0x0A||f[i]==0x1A||f[i]==0) {
f[i]=0;
break;//
}
while (f[i]==' '||f[i]==9) {
f[i]=0;
i++;
}
ag[j]=f+i;
while (f[i]!=9&&f[i]!=' '&&f[i]!=0x0D&&f[i]!=0x0A&&f[i]!=0x00) i++;
}
lenf=j;
for (i=0;i<lenf;i++) {
if (isxdigit(ag[i][0])) {
bw[i]=0;
sscanf(ag[i],"%2x",&bf[i]);
} else {
bw[i]=1;
}
}
}
printf("Replace:");
fflush(stdout);
fgets(f,MAX2N,stdin);
L=strlen(f);if ('\n'==f[L-1]) f[L-1]=0;
if (f[0]==0 || '\n'==dn[0]) find=1;
else {
if (f[0]=='\'') {
lenr=strlen(f)-1;
if (lenr!=lenf) {
printf("Error: Find len != Replace len");
fclose(fi);
break;//
}
find=0;
fo=fopen(dn,"wb");
for (j=0;j<lenr;j++) {
if (f[j+1]=='?') bx[j]=1;
else {
bx[j]=0;
br[j]=f[j+1];
}
}
} else {
i=0;
for (j=0;j<MAXN;j++) {
if (f[i]==0x0D||f[i]==0x0A||f[i]==0x1A||f[i]==0) {
f[i]=0;
break;//
}
while (f[i]==' '||f[i]==9) {
f[i]=0;
i++;
}
ag[j]=f+i;
while (f[i]!=9&&f[i]!=' '&&f[i]!=0x0D&&f[i]!=0x0A&&f[i]!=0x00) i++;
}
lenr=j;
if (lenr!=lenf) {
printf("Error: Find len != Replace len");
fclose(fi);
break;//
}
find=0;
fo=fopen(dn,"wb");
for (i=0;i<lenr;i++) {
if (isxdigit(ag[i][0])) {
bx[i]=0;
sscanf(ag[i],"%2x",&br[i]);
} else {
bx[i]=1;
}
}
}
}
if (lenf<=0) break;//
FR();
fcloseall();
}
return 0;
}