以下是我修改的函数
WCHAR ff_convert (WCHAR src,UINT dir)
{
//const WCHAR *p;//typedef unsigned short WCHAR;
WCHAR c; //typedef unsigned short WCHAR;
int i, n, li, hi;
FIL f_u2gb;
FILINFO finfo1;
WCHAR t[2];
u32 gbk2uni_offset=0;
UINT br1;
u8 buffer[4];
//u16 table[2];
if(f_open(&f_u2gb,"c936.bin",FA_READ)==0)//打开c936.bin
printf("f_open_c936.bin_ok\r\n");//返回成功打开文件标志
else
printf("f_open_c936.bin_error\r\n");//返回成功打开文件标志
if(f_stat("c936.bin", &finfo1)==0) //能够获取c936.bin的大小
printf("c936.bin_size%d\r\n",finfo1.fsize);//返回文件的大小byte
if (src < 0x80)/* ASCII集 不用转换*/
{
c = src;
}
else
{
if (dir)/* OEMCP to unicode */
{
gbk2uni_offset=finfo1.fsize/2;
}
else/* Unicode to OEMCP */
{
gbk2uni_offset=0;
}
hi=finfo1.fsize/2;//对半开.
hi =hi / 4 - 1;
li = 0;
for (n = 16; n; n--)
{
i = li + (hi - li) / 2;
f_read(&f_u2gb, buffer, sizeof(buffer),&br1);
t[0]=(buffer[1]<<8)+buffer[0];
t[1]=(buffer[3]<<8)+buffer[2];
if (src == t[0]) break;
if (src > t[0])
li = i;
else
hi = i;
}
c = n ? t[1] : 0;
}
f_close(&f_u2gb); //不论是打开,还是新建文件,一定记得关闭
return c;
}
我主函数就干了些这个,把q.txt 的信息读回来,然后进行显示。
res = f_stat("q.txt", &finfo); //读取 folder 目录下 newname.txt 文件的信息
if( res )
printf("q.txt err : %d\r\n", res);
else
{
printf("q.txt size : %lu\r\n",finfo.fsize);
printf("fdate : %d\r\n",finfo.fdate);
printf("ftime : %d\r\n",finfo.ftime);
printf("fattrib : %d\r\n",finfo.fattrib);
} 这是主函数的东西
然后我屏蔽上面红色的部分,主函数执行正常,返回q.txt 正确的信息,当不屏蔽红色部分,那么程序就会卡死,卡死在
if(f_open(&f_u2gb,"c936.bin",FA_READ)==0)//打开c936.bin
这里
|