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

📄 fileop.cpp

📁 (C++)语言下文件输入输出函数的一些局限性 数据加密算法原理、实现
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>

int fileopenforread(const char *filename, int &errorcode)
{
	int result;

	asm mov dx, filename
	asm mov al, 0h
	asm mov ah, 3dh
	asm int 21h
	asm jnc open_ok
	asm mov result, 0
	asm mov errorcode, ax
	asm jmp over
open_ok:
	asm mov result, ax
over:

	return result;
}
/*
int fileopenforwrite(const char *filename, int &errorcode)
{
	int result;

	asm mov dx, filename
	asm mov al, 1
	asm mov ah, 3dh
	asm int 21h
	asm jnc open_ok
	asm mov dx, filename
	asm mov cx, 0
	asm mov ah, 3ch
	asm int 21h
	asm jnc open_ok
	asm mov result, 0
	asm mov errorcode, ax
	asm jmp over
open_ok:
	asm mov result, ax
over:

	return result;
}
*/
int fileopenforreadwrite(const char *filename, int &errorcode)
{
	int result;

	asm mov dx, filename
	asm mov al, 2
	asm mov ah, 3dh
	asm int 21h
	asm jnc open_ok
	asm mov dx, filename
	asm mov cx, 0
	asm mov ah, 3ch
	asm int 21h
	asm jnc open_ok
	asm mov result, 0
	asm mov errorcode, ax
	asm jmp over
open_ok:
	asm mov result, ax
over:

	return result;
}

int fileread(int fhandle, char *pbuff, int count, int &errorcode)
{
	int result;

	asm mov cx, count
	asm mov dx, pbuff
	asm mov bx, fhandle
	asm mov ah, 3fh
	asm int 21h
	asm jc read_err
	asm mov result, ax
	asm jmp over
read_err:
	asm mov result, -1
	asm mov errorcode, ax
over:

	return result;
}

int filewrite(int fhandle, char *pbuff, int count, int &errorcode)
{
	int result;

	asm mov cx, count
	asm mov dx, pbuff
	asm mov bx, fhandle
	asm mov ah, 40h
	asm int 21h
	asm jc write_err
	asm mov result, ax
	asm jmp over
write_err:
	asm mov result, -1
	asm mov errorcode, ax
over:

	return result;
}

int fileseek(int fhandle, long foffset, char origin, int &errorcode)
{
	int result, lowword, highword;

	lowword = (int)(foffset & 0xff);
	highword = (int)((foffset >> 16) & 0xff);

	asm mov bx, fhandle
	asm mov cx, highword
	asm mov dx, lowword
	asm mov al, origin
	asm mov ah, 42h
	asm int 21h
	asm jnc seek_ok
	asm mov result, -1
	asm mov errorcode, ax
	errorcode = (char)(*((int*)(&errorcode)));
	asm jmp over
seek_ok:
	asm mov result, 1
over:

	return result;
}
/*
long filetell(int fhandle, int &errorcode)
{
	int lowword, highword;
	long result;

	asm mov bx, fhandle
	asm mov cx, 0
	asm mov dx, 0
	asm mov al, 1
	asm mov ah, 42h
	asm int 21h
	asm jnc tell_ok
	asm mov result, -1
	asm mov errorcode, ax
	errorcode = (char)(*((int*)(&errorcode)));
	asm jmp over
tell_ok:
	asm mov lowword, ax
	asm mov highword, dx
	result = (long)(highword << 16) + (long)lowword;
over:

	return result;
}
*/
int fileclose(int fhandle)
{
	int result;

	asm mov bx, fhandle
	asm mov ah, 3eh
	asm int 21h
	asm jnc close_ok
	asm mov result, -1
	asm jmp over
close_ok:
	asm mov result, 1
over:

	return result;
}

long filesize(FILE *stream)
{
   long curpos, length;

   curpos = ftell(stream);
   fseek(stream, 0L, SEEK_END);
   length = ftell(stream);
   fseek(stream, 0L, SEEK_SET);
   length -= ftell(stream);
   fseek(stream, curpos, SEEK_SET);
   return length;
}

int main(int argc, char *argv[])
{
	FILE *sfile, *tfile1, *tfile2, *tfile3, *mfile2, *mfile3, *smfile;
	long length, i;
	int sfhandler, mfhandler, errorcode;
	char *c = NULL, ch;

	printf("\nWritten by ZhangZuoYang.\t2001.2.6\n\n");
	if(argc != 2)
	{
		printf("Usage:fileop filename\n");
		return 1;
	}

	sfile = tfile1 = tfile2 = tfile3 = mfile2 = mfile3 = smfile = NULL;
	sfhandler = mfhandler = 0;

	sfile = fopen(argv[1], "r");
	mfile2 = fopen("mf2.txt", "w");
	mfile3 = fopen("mf3.txt", "w");

	c = (char*)malloc(9 * sizeof(char));
	c[8] = '\0';
	length = filesize(sfile);
	for(i = 0; i < length/8; i++)
	{
		fread(c, 1, 8, sfile);
		fwrite(c, 1, 8, mfile3);
	}
	if(length%8)
	{
		fread(c, 1, length%8, sfile);
		fwrite(c, 1, length%8, mfile3);
	}

	ch = 26;
	fwrite((char*)(&ch), 1, 1, mfile3);
	fseek(sfile, 0, SEEK_SET);
	for(i = 0; i < length/8; i++)
	{
		fread(c, 1, 8, sfile);
		fwrite(c, 1, 8, mfile3);
	}
	if(length%8)
	{
		fread(c, 1, length%8, sfile);
		fwrite(c, 1, length%8, mfile3);
	}

	fseek(sfile, 0, SEEK_SET);
	while(!feof(sfile))
	{
		ch = fgetc(sfile);
		fputc(ch, mfile2);
	}

	fputc(26, mfile2);
	fseek(sfile, 0, SEEK_SET);
	while(!feof(sfile))
	{
		ch = fgetc(sfile);
		fputc(ch, mfile2);
	}

	fclose(sfile);
	fclose(mfile2);
	fclose(mfile3);

	sfhandler = fileopenforread(argv[1], errorcode);
	if(sfhandler == 0)
	{
		printf("sfhandler open error 0x%x\n", errorcode);
		return 1;
	}
	mfhandler = fileopenforreadwrite("mf1.txt", errorcode);
	if(mfhandler == 0)
	{
		printf("mfhandler open error 0x%x\n", errorcode);
		fileclose(mfhandler);
		return 1;
	}
	length = 8;
	while(length == 8)
	{
		length = fileread(sfhandler, c, 8, errorcode);
		filewrite(mfhandler, c, length, errorcode);
	}

	ch = 26;
	filewrite(mfhandler, (char*)(&ch), 1, errorcode);

	fileseek(sfhandler, 0, 0, errorcode);
	length = 8;
	while(length == 8)
	{
		length = fileread(sfhandler, c, 8, errorcode);
		filewrite(mfhandler, c, length, errorcode);
	}
	fileclose(sfhandler);

	tfile3 = fopen("tf3.txt", "w");
	fileseek(mfhandler, 0, 0, errorcode);
	length = 8;
	while(length == 8)
	{
		length = fileread(mfhandler, c, 8, errorcode);
		fwrite(c, 1, length, tfile3);
	}

	fileclose(mfhandler);
	fclose(tfile3);

	smfile = fopen("mf1.txt", "r");
	tfile1 = fopen("tf1.txt", "w");
	tfile2 = fopen("tf2.txt", "w");

	length = filesize(smfile);
	for(i = 0; i < length/8; i++)
	{
		fread(c, 1, 8, smfile);
		fwrite(c, 1, 8, tfile1);
	}
	if(length%8)
	{
		fread(c, 1, length%8, smfile);
		fwrite(c, 1, length%8, tfile1);
	}

	fseek(smfile, 0, SEEK_SET);
	while(!feof(smfile))
	{
		ch = fgetc(smfile);
		fputc(ch, tfile2);
	}

	free(c);
	fclose(smfile);
	fclose(tfile1);
	fclose(tfile2);

	return 0;
}

⌨️ 快捷键说明

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