免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3106 | 回复: 10
打印 上一主题 下一主题

文件读写行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-16 09:30 |只看该作者 |倒序浏览
请教各位高手。怎么才能实现文件行的读写。如果逐个读写,会使中文成为乱码。

论坛徽章:
0
2 [报告]
发表于 2007-07-16 10:00 |只看该作者
fgets......

论坛徽章:
0
3 [报告]
发表于 2007-07-16 10:03 |只看该作者
我用fgets总读取到空的数据

论坛徽章:
0
4 [报告]
发表于 2007-07-16 10:09 |只看该作者
static int st_printer_read_file_row(char *pszData, int *pnDataLen)
{
        int nRet = 0;
        char cCh = '0';
        char *pszLine = NULL;
        char szLineBuf[300];
        int n = 0;
        int nReadNum = 0, nLen = 0;
       
        memset(szLineBuf, 0, sizeof(szLineBuf));

        nRet = st_printer_open_template_file();
        if (0 > nRet)
        {
                return FALSE;
        }
       
        if (feof(s_fp))
        {
                printf("The end of file!\r\n");
                return FALSE;
        }
        pszLine = fgets(szLineBuf, sizeof(szLineBuf)-1, s_fp);
        /*if (NULL == pszLine)
        {
                printf("pszLine is NULL\r\n");
                return FALSE;
        }*/
        nRet = ferror(s_fp);
        printf("Error code is %d!\r\n", nRet);
        if (0 != nRet)
        {
                return FALSE;
        }
        printf("Data :%s\r\n", szLineBuf);
        strcpy(pszData, szLineBuf);
        *pnDataLen = strlen(szLineBuf);
        printf("DataLen is %d,\r\nData = %s\r\n", *pnDataLen, pszData);
        s_lOffset += (nLen+1);
        st_printer_close_template_file();
        return TRUE;
}
这是我写的代码,但总读不到数据

论坛徽章:
0
5 [报告]
发表于 2007-07-16 10:12 |只看该作者
文件读写一般有两种方法, 一个是带缓冲的, 采用标准IO的函数, 例如fopen=> fgets fputs, fprintf, fscanf...

另外一种是不带缓冲的, 直接用open/create => read and write。

还有种不常用的手段, 就是nmap把文件映射到内存中进行读写, 

至于会不会乱码的问题, 那就要自己去控制了。。乱写肯定是乱码的。

论坛徽章:
0
6 [报告]
发表于 2007-07-16 10:21 |只看该作者
不是乱写,是汉字是两字符,如果fgetc,一个字节一个字节的读,就会被拆,出现乱码的

论坛徽章:
0
7 [报告]
发表于 2007-07-16 13:45 |只看该作者
明白楼主的意思,在WIN下面倒是有现成的API函数,好解决,在LINUX下面,倒还没想过.....

论坛徽章:
0
8 [报告]
发表于 2007-07-16 18:02 |只看该作者
其实可以自己处理汉字,网上搜一下汉字的编码方式,一般都是2字节的GBK编码(印象中GBK编码有更多字节的,记错了不准拍砖头),搞清楚表示一个汉字的两个字节的ASCII码的范围,就可以自己处理了。

论坛徽章:
0
9 [报告]
发表于 2007-07-17 12:29 |只看该作者
没必要这么复杂吧?我只需简单的从文件读出来,再写进去而已,没必要花那么多功夫来解析汉字吧?

论坛徽章:
0
10 [报告]
发表于 2007-07-17 13:13 |只看该作者
原帖由 homegirl 于 2007-7-17 12:29 发表
没必要这么复杂吧?我只需简单的从文件读出来,再写进去而已,没必要花那么多功夫来解析汉字吧?

你fgets使用的s_fp哪里来的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP