注册 登录
编程论坛 VC++/MFC

请看一下这一段文件读写代码错在什么地方

llp108 发布于 2013-05-12 19:14, 617 次点击
这段代码只能正确读写文件的一部分  文件
只有本站会员才能查看附件,请 登录
文件是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 编辑 ]
4 回复
#2
llp1082013-05-12 19:47
知道了 是不是文件getlength()的返回值超出DWORD的大小范围了 因为文件太大  还是不对 求正解

[ 本帖最后由 llp108 于 2013-5-12 22:45 编辑 ]
#3
盖世太保2013-05-15 17:45
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 编辑 ]
#4
邓士林2013-05-15 22:16
可能就像你说的
#5
llp1082013-05-18 13:43
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 编辑 ]
1