| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:请看一下这一段文件读写代码错在什么地方
只看楼主 加入收藏
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:4 
请看一下这一段文件读写代码错在什么地方
这段代码只能正确读写文件的一部分  文件
pinyin.rar (53.01 KB)
文件是txt文件,只能正确读到拼音den那一行第16个字,在多一字都要循环读写 不知道为什么;
代码如下:(从一个文件读取 写入另一个文件)[
    char * pBuffer=new char[0x2000];
    CFile fileR;
    fileR.Open("G:\\PRACTICE\\HANZIZHUANGPINYIN\\pinyin.txt",CFile::modeRead);
    CFile fileW;
    fileW.Open("NIHAO.txt",CFile::typeText|CFile::modeCreate|CFile::modeWrite);
    DWORD dwFileLength=fileR.GetLength();
    DWORD dwPosition;
    UINT nByteRead;

    while(dwFileLength)
    {
        dwPosition=fileR.GetPosition();
        nByteRead=fileR.Read(pBuffer,0x2000);
        fileR.Seek((LONG)dwPosition,CFile::begin);
        fileW.Write(pBuffer,nByteRead);
        
        dwFileLength-=nByteRead;
    }
    fileR.Close();
    fileW.Close();
    delete[] pBuffer;

[ 本帖最后由 llp108 于 2013-5-12 19:34 编辑 ]
搜索更多相关主题的帖子: 拼音 
2013-05-12 19:14
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
收藏
得分:0 
知道了 是不是文件getlength()的返回值超出DWORD的大小范围了 因为文件太大  还是不对 求正解

[ 本帖最后由 llp108 于 2013-5-12 22:45 编辑 ]
2013-05-12 19:47
盖世太保
Rank: 2
等 级:论坛游民
帖 子:1
专家分:10
注 册:2013-5-15
收藏
得分:10 
http://bbs.  看一下这个有空。听说CFile::typeText只工作在CFile的派生类中。至于为什么,我也不清楚。

下班了,详细看了下代码
while(dwFileLength)
    {
        dwPosition=fileR.GetPosition();
        nByteRead=fileR.Read(pBuffer,0x2000);
        fileR.Seek((LONG)dwPosition,CFile::begin);
        fileW.Write(pBuffer,nByteRead);
        dwFileLength-=nByteRead;
    }
第一次循环执行时,dwPosition=0,然后下面你调用Seek后又将指针移到了0,即文件开头处,下次循环时dwPosition又是0,死循环了就。
应该在读取过后,将dwPosition+=nByteRead.

[ 本帖最后由 盖世太保 于 2013-5-16 17:45 编辑 ]
2013-05-15 17:45
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:10 
可能就像你说的

Maybe
2013-05-15 22:16
llp108
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-11-15
收藏
得分:0 
char* pBuffer=new char[];
    CFile fileR;
    fileR.Open("G:\\PRACTICE\\HANZIZHUANGPINYIN\\pinyin.txt",CFile::modeRead);
    CFile fileW;
    fileW.Open("NIHAO.txt",CFile::typeText|CFile::modeCreate|CFile::modeWrite);
    UINT nByteRead;

    while(*pBuffer!='?')//文件中最后有一个?号做为结束标志
    {
        nByteRead=fileR.Read(pBuffer,1);
        fileW.Write(pBuffer,nByteRead);
    }
    fileR.Close();
    fileW.Close();
    delete[] pBuffer;
一个一个字符读 还是那个文件 可以完全读出 但是老提示有错 但是你选择忽略都可以成功写入读取 不知为什么

[ 本帖最后由 llp108 于 2013-5-18 13:45 编辑 ]
2013-05-18 13:43
快速回复:请看一下这一段文件读写代码错在什么地方
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020702 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved