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

📄 file_demo.c

📁 tp850掌机源码文件操作例子,C语言写的,可以
💻 C
📖 第 1 页 / 共 2 页
字号:
	U8  i, row = 1;
	U8  buffer[11] = {0} ;  //存放读出来的字符
	U8  seq[8]     = {0} ;  //记录序号
	S32 key, size;
	
	_cls();
    _PutString(0, 1, "可读文件:\n");

	//列出可读文件
	for(i=0;i<8;i++)
	{
		if(g_open[i] == 1)
		{
			if(g_readorwrite[i] == 1 || g_readorwrite[i] == 4)
			{
				seq[row - 1] = i;
				row_name(0, row+1, row, g_filename[i]);			
			  row++;						
			}
		}
	}

	//选择文件读
	key = _bioskey(0);

	if(key >= NUMBER_1  && key <= NUMBER_8 )
	{
		if ((key - NUMBER_1) < g_readcount)
			g_opennum = seq[(U8)(key - NUMBER_1)];
		else 
			return;
	}
	else
		return;
	
	
	//输出选择读的文件名
	_cls();
	_PutString(0, 1, "读出文件\n");
	_putstr(g_filename[g_opennum]);

	//文件长度
	size = _filelength(g_fp[g_opennum]);
    _PutString(0, 4, "文件长度:");
    _prtf(200, 200, "%u", size);
	
   
   //读文件
	while(_bioskey(0) != ESC)
	{		
		size = _fread(buffer, 10, g_fp[g_opennum]);
	
		//10字节一次输出读出的文件内容
		_clsn(5, 4);
		if(size > 0)
		{
			_PutString(0, 5, "读出的实际字节数:");
		  _prtf(200, 200, "%d" , size);
			_putstr(" \n");
			_putstr(buffer);  
			memset(buffer, 0, 11);
		}
		else
			_PutString(0, 6, "读出文件失败!") ;	
 
	    //文件指针偏移
		size = _ftell(g_fp[g_opennum]);  
		_PutString(0, 8, "指针偏移:");
		_prtf(200, 200, "%d", size);
	}
	

}

void f_write(void)
{
	S32  size, file_len;
	S16  key;
	U8   row = 1, i;        //row是行号
	U8   seq[8]   = {0};  //记录序号
	U8   buf_w[256] = {0};  //写缓存

	for (i = 0; i<255; i++)
	{
		buf_w[i] = i%26 + 'a';
	}
	
	//显示可写文件
	_cls();
	_PutString(0, 1, "可写文件数:");
	_prtf(200, 200, "%u", g_writecount);
	_gotoxy(0, 2);	
	for(i=0;i<8;i++)
	{
		if(g_open[i] == 1)
		{
			if(g_readorwrite[i] == 2 || g_readorwrite[i] == 3 || g_readorwrite[i] == 4)
			{
				seq[row - 1] = i;
				row_name(0, row+1, row, g_filename[i]);
			  row++;		
			}
		}
	}

	//选择可写文件
	key = _bioskey(0);
	
	if(key >= NUMBER_1  && key <= NUMBER_8  )
	{
		if ((U8)(key - NUMBER_1) < g_writecount)
			g_opennum = seq[(U8)(key - NUMBER_1)];
		else 
			return;
	}
	else
		return;


	//选择写的方式:1. 自动写入a-z的字符; 2. 手动写入
	_cls();
	_PutString(0, 1, "写文件:\n");
	_putstr(g_filename[g_opennum]);
	_PutString(0, 4, "请选择写入方式: \n1. 自动写入字符a-z\n2. 手动写入字符\n");

	key = _bioskey(0);

	//自动写入
	if (key == NUMBER_1)
	{
		while(_bioskey(0) != ESC)
		{
			size     = _fwrite(buf_w, strlen(buf_w), g_fp[g_opennum]); 
			file_len = _filelength(g_fp[g_opennum]);

			//显示实际写入字符数以及文件长度
			_cls();	
			_putstr("\n写入字符串'a-z'共255个字节\n");
			_PutString(0, 5, "写入的实际字节数:");
			_prtf(200, 200, "%d", size);			
			_PutString(0, 6, "文件长度:");
			_prtf(200, 200, "%u", file_len);
			
		}
	}
	//手动写入
	else if (key == NUMBER_2)
	{
		U8 str_key[51] = {0};
		
		while(_bioskey(0) != ESC)
		{
			_cls();
			_PutString(0, 1, "请输入50个以内字符!\n");
			string_key(str_key, 50);
			
			size     = _fwrite(str_key, strlen(str_key), g_fp[g_opennum]); 
			file_len = _filelength(g_fp[g_opennum]);			
			
			//显示实际写入字符数以及文件长度
			_PutString(0, 5, "写入的实际字节数:");
			_prtf(200, 200, "%d", size);			
			_PutString(0, 6, "文件长度:");
			_prtf(200, 200, "%u", file_len);
			
			memset(str_key, 0, 50);
		}
	}
	else
		return;	


}

void f_close(void)
{
	U16 key;
	U8  seq[8] = {0}; //记录序数
	U8  row = 1, i;

	
	//显示可关闭文件
	_cls();
	_PutString(0, 1, "可关闭文件:");
	_gotoxy(0, 2);	
	for(i=0;i<8;i++)
	{
		if(g_open[i] == 1)
		{
			seq[row - 1] = i;

			row_name(0, row+1, row, g_filename[i]);
			
			row++;	
		}
	}

	//选择关闭文件
	key = _bioskey(0);	
	if(key >= NUMBER_1  && key <= NUMBER_8  )
	{
		if ((U8)(key - NUMBER_1) < g_opencount)
			g_opennum = seq[(U8)(key - NUMBER_1)];
		else 
			return;
	}
	else
		return;

	//关闭文件
	if (!_fclose(g_fp[g_opennum]))
	{
		_PutString(0, 7, "正常关闭");
		g_open[g_opennum] = 0;
		g_fp[g_opennum] = 0;
		g_opencount--;
		if(g_readorwrite[g_opennum] == 1 || g_readorwrite[i] == 4)
			g_readcount--;
		else if(g_readorwrite[g_opennum] == 2 || g_readorwrite[i] == 3 || g_readorwrite[i] == 4)
			g_writecount--;
	}	
	else 
		_putstr("关闭文件出错!");
	
	_bioskey(0);  
}


/************************************************************************/
/* 数据输入                                                                     */
/************************************************************************/
S32	_read_data(void)
{
	U16	ctemp = 0;
	U8	sign = 0;						//加减号标志
	U8	signTime = 0;					//加减号次数
	S32	data = 0;						//返回的最终输入数据
	S32	tempdata = 0;					//按键的临时数据

	ctemp = _bioskey(0);
	while (ctemp != ENTER)
	{	
		tempdata = 11;
		switch((U8)ctemp) 
		{
			case 0x30 :	tempdata = 0;
						_putstr("0");
						break;

			case 0x31 :	tempdata = 1;
						_putstr("1");
						break;

			case 0x32 :	tempdata = 2;
						_putstr("2");
						break;

			case 0x33 :	tempdata = 3;
						_putstr("3");
						break;

			case 0x34 :	tempdata = 4;
						_putstr("4");
						break;
	
			case 0x35 :	tempdata = 5;
						_putstr("5");
						break;

			case 0x36 :	tempdata = 6;
						_putstr("6");
						break;

			case 0x37 :	tempdata = 7;
						_putstr("7");
						break;

			case 0x38 :	tempdata = 8;
						_putstr("8");
						break;

			case 0x39 :	tempdata = 9;
						_putstr("9");
						break;

			case ESC :	
				return ESC;
				break;
		
			default :
				break;
		}

		if (tempdata < 10)
		{
			data = data * 10 + tempdata;
		}
		ctemp = _bioskey(0);
	}

	return data;
}
/************************************************************************/
/* 各种类型数据的输出                                                                     */
/************************************************************************/
void _prtf(U8 x, U8 y, U8* flg, S32 data)
{
	U8 tmp[20] = {0};
	if (x != 200 && y != 200)
		_gotoxy(x, y);
	sprintf(tmp, flg, data);
	_putstr(tmp);
}

/************************************************************************/
/* 带序号文件名输出
  void row_name(U8 px, U8 py, U8 row, U8* name)
  输入:输出位置 px,py
        行号 row; 行中需要显示的文件名串 name
                                                                       */
/************************************************************************/
void row_name(U8 px, U8 py, U8 row, U8* name)
{
	_gotoxy(px, py);
	_putch(48 + row);
	_putstr(". ");
	_putstr(name);
}



/************************************************************************/
/* U8 string_key(U8* str, U8 len_str)
   输入:str:用于存放输入键值的字符串指针; len_str:字符串的最大长度
   返回:若键入ESC则返回0, 否则返回1                                                                      */
/************************************************************************/
U8 string_key(U8* str, U8 len_str)
{
	S16 Key;            //接收键盘输入的键值
	U8 len_fact = 0;     //接收到的字符串长度

	while(1)
	{
		if (len_fact >= len_str)
			break;
		
		Key = _bioskey(0); 
		
		//若按退出键则返回NULL,调用函数判断若为0,则跳出函数
		if (Key == ESC)
			return 0;
		
		//输入ENTER表示字符串输入结束
		if (Key == ENTER)
			break;
		
		//删除键
		if (Key == DEL && len_fact >0)
		{
			len_str--;
			str[len_str] = 0x00;
			_putch(Key);
			continue;
		}
		
		//记入并输出按键
        _putch(Key);
		str[len_fact] = Key;
		len_fact++;
	}

	return 1;
}

⌨️ 快捷键说明

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