?? file_demo.c
字號:
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 + -